/// <summary> /// 取X坐标字段 /// </summary> /// <returns></returns> private string GetXFields() { if (this.CB_XLIST.SelectedItem == null) { return(""); } ChartFieldItem _item = this.CB_XLIST.SelectedItem as ChartFieldItem; return((_item == null) ? "" : _item.FieldName); }
/// <summary> /// 建立字段列表 /// </summary> private void CreateColumnList() { string[] _meta; if (DataSource == null) { return; } if (FieldsDict == null) { return; } DataTable _dt = DataSource; //排序列表中添加一个空字段 ChartFieldItem _blankItem = new ChartFieldItem("[ 无排序字段 ]", "[ 无排序字段 ]"); this.CB_SORTLIST.Properties.Items.Add(_blankItem); this.CB_SORTLIST.SelectedIndex = 0; foreach (string _fname in FieldsDict.Keys) { string _displayName = FieldsDict[_fname]; DataColumn _dc = _dt.Columns[_fname]; if (_dc != null) { ChartFieldItem _fitem = new ChartFieldItem(_fname, _displayName); if (_dc.DataType == typeof(string) || _dc.DataType == typeof(DateTime)) { //如果是字符型或日期型,则将字段名加入到横坐标中 this.CB_XLIST.Properties.Items.Add(_fitem); } else { //如果是数值型,则将字段名加入到纵坐标中 this.CB_YLIST.Items.Add(_fitem, false); } //将字段加入到排序列表中 this.CB_SORTLIST.Properties.Items.Add(_fitem); } } if (this.CB_XLIST.Properties.Items.Count > 0) { this.CB_XLIST.SelectedIndex = 0; } if (this.CB_YLIST.Items.Count == 1) { this.CB_YLIST.Items[0].CheckState = CheckState.Checked; } }
/// <summary> /// 筛选记录个数 /// </summary> /// <param name="DataSource"></param> /// <returns></returns> private DataTable ReCountData(string _charType) { DataView _dv; DataTable _dt; string _countStr = this.CB_ITEMCOUNT.EditValue.ToString().Trim(); string _XfieldName = GetXFields(); if (this.CB_SORTLIST.SelectedItem == null) { return(DataSource); } ChartFieldItem _sortFiled = this.CB_SORTLIST.SelectedItem as ChartFieldItem; int _countNum = int.MaxValue; if (this.CB_ITEMCOUNT.EditValue != null) { if (_countStr != "全部") { _countNum = int.Parse(_countStr); } } string _sortType = "DESC"; switch (this.CB_SORTTYPE.SelectedIndex) { case 0: _sortType = "DESC"; break; case 1: _sortType = "ASC"; break; } string _sortString = ""; //如果是无排序字段,则用 if (_sortFiled.FieldName == "[ 无排序字段 ]") { _sortString = string.Format("{0} {1}", _XfieldName, _sortType); } else { _sortString = string.Format("{0} {1}", _sortFiled.FieldName, _sortType); } switch (_charType) { case "饼状图": _dv = new DataView(DataSource, "", _sortString, DataViewRowState.CurrentRows); _dt = DataSource.Clone(); DataRow _otherDataRow = null; if (_countStr != "全部") { _otherDataRow = _dt.NewRow(); if (_dt.Columns[_XfieldName].DataType == typeof(DateTime)) { _otherDataRow[_XfieldName] = DateTime.MinValue; } else { _otherDataRow[_XfieldName] = "其它"; } } for (int i = 0; i < _dv.Count; i++) { if (i < _countNum) { DataRow _dr = _dv[i].Row; _dt.ImportRow(_dr); } else { DataRow _dr = _dv[i].Row; foreach (DataColumn _dc in _dt.Columns) { if (_dc.DataType == typeof(double) && _dc.ColumnName != _XfieldName) { if (_otherDataRow.IsNull(_dc)) { _otherDataRow[_dc.ColumnName] = 0; } _otherDataRow[_dc.ColumnName] = ((double)_otherDataRow[_dc.ColumnName]) + (_dr.IsNull(_dc.ColumnName) ? 0 : (double)_dr[_dc.ColumnName]); } } } } if (_otherDataRow != null) { _dt.Rows.Add(_otherDataRow); } return(_dt); default: _dv = new DataView(DataSource, "", _sortString, DataViewRowState.CurrentRows); _dt = DataSource.Clone(); for (int i = 0; i < _dv.Count; i++) { if (i < _countNum) { DataRow _dr = _dv[i].Row; _dt.ImportRow(_dr); } else { break; } } return(_dt); } }
/// <summary> /// 显示图表 /// </summary> public void CreatChart() { //如果未初始化 if (!_initFinishted) { return; } panelShow.Controls.Clear(); //如果没有数据源 if (DataSource == null) { return; } //如果没有选择图表类型 if (this.CB_CHARTTYPE.SelectedItem == null) { return; } //如果没有X坐标,则退出 string _Xfields = GetXFields(); if (_Xfields == "") { return; } //取纵坐标数据 List <string> _Yfields = new List <string>(); Dictionary <string, string> _YTitles = new Dictionary <string, string>(); foreach (CheckedListBoxItem _obj in this.CB_YLIST.CheckedItems) { ChartFieldItem _item = _obj.Value as ChartFieldItem; _Yfields.Add(_item.FieldName); _YTitles.Add(_item.FieldName, _item.DisplayName); } //如果没有Y坐标,则退出 if (_Yfields.Count < 1) { return; } string _charTypeStr = CB_CHARTTYPE.SelectedItem.ToString(); DataTable _dt = ReCountData(_charTypeStr); //开始画图表 Control chartControl1; if (CB_CHARTTYPE.SelectedItem != null) { switch (_charTypeStr) { case "柱状图": _ChartType = 0; chartControl1 = DevChartClass.CreateBarChart(_dt, _Xfields, _Yfields, _YTitles, this.checkEdit1.Checked, this.DataPrecision); panelShow.Controls.Add(chartControl1); break; case "饼状图": _ChartType = 1; chartControl1 = DevChartClass.CreatePieChart(_dt, _Xfields, _Yfields, _YTitles, this.checkEdit1.Checked, this.DataPrecision); panelShow.Controls.Add(chartControl1); break; case "线型图": _ChartType = 2; chartControl1 = DevChartClass.CreateLineChart(_dt, _Xfields, _Yfields, _YTitles, this.checkEdit1.Checked, this.DataPrecision); panelShow.Controls.Add(chartControl1); break; } } _showLegend = true; _showLabel = true; _showAsLog = false; }