Example #1
0
        /// <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);
        }
Example #2
0
        /// <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;
            }
        }
Example #3
0
        /// <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);
            }
        }
Example #4
0
        /// <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;
        }