private List <ChartSeriesInfo> createExtendChart(DataTable table, ChartMappingInfo mapping, string viewType) { List <ChartSeriesInfo> chartSeries = new List <ChartSeriesInfo>(); foreach (DataRow row in table.Rows) { string xValue = row[mapping.XColumn].ToString(); string seriesName = row[mapping.SeriesColumn].ToString(); decimal yValue = 0; if (row[mapping.YColumn] != null) { yValue = decimal.Parse(row[mapping.YColumn].ToString()); } var chart = chartSeries.Find(c => c.Name == seriesName); if (chart == null) { chart = new ChartSeriesInfo(seriesName, viewType); chartSeries.Add(chart); } chart.SeriesPoints.Add(new ChartSeriesPointInfo(xValue, yValue)); } return(chartSeries); }
public void RefreshBindingData(DataSet ds) { try { //参数校验 if (string.IsNullOrEmpty(XColumn)) { throw new MB.Util.APPException("XColumn未设置,初始化控件失败!", Util.APPMessageType.DisplayToUser); } if (string.IsNullOrEmpty(YColumn)) { throw new MB.Util.APPException("YColumn未设置,初始化控件失败!", Util.APPMessageType.DisplayToUser); } if (string.IsNullOrEmpty(SeriesColumn)) { throw new MB.Util.APPException("SeriesColumn未设置,初始化控件失败!", Util.APPMessageType.DisplayToUser); } if (string.IsNullOrEmpty(ArgumentType)) { throw new MB.Util.APPException("ArgumentType未设置,初始化控件失败!", Util.APPMessageType.DisplayToUser); } if (string.IsNullOrEmpty(ViewType)) { throw new MB.Util.APPException("ViewType未设置,初始化控件失败!", Util.APPMessageType.DisplayToUser); } ChartMapping = new ChartMappingInfo(_XColumn, _YColumn, _SeriesColumn, _ArgumentType); chartControl.Titles.Clear(); chartControl.Titles.Add(new ChartTitle() { Text = Title, Font = new Font("宋体", 24, System.Drawing.FontStyle.Bold) }); chartControl.Legend.Visible = true; chartControl.Series.Clear(); chartControl.DataSource = ds; if (ds == null || ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0) { return; } ChartMappingHelper helper = new ChartMappingHelper(null); List <ChartSeriesInfo> series = helper.ConvertToChartSeries(ds.Tables[0], _ChartMapping, _ViewType); if (series == null || series.Count == 0) { throw new MB.Util.APPException("ChartSeries转换失败,请检查数据源与配置的Mapping项是否匹配!", Util.APPMessageType.DisplayToUser); } DxChartControlHelper.Instance.BindingDxChartControl(chartControl, series); } catch (Exception ex) { MB.WinBase.ApplicationExceptionTerminate.DefaultInstance.ExceptionTerminate(ex); } }
private List <ChartSeriesInfo> createSumChart(DataTable table, ChartMappingInfo mapping, string viewType) { List <ChartSeriesInfo> chartSeries = new List <ChartSeriesInfo>(); IEnumerable <IGrouping <string, DataRow> > result = table.Rows.Cast <DataRow>().GroupBy <DataRow, string>(dr => dr[mapping.SeriesColumn].ToString()); foreach (IGrouping <string, DataRow> series in result) { var seriesInfo = new ChartSeriesInfo(series.Key, viewType.ToString()); var xValues = series.Cast <DataRow>().GroupBy <DataRow, string>(dr => dr[mapping.XColumn].ToString()); foreach (IGrouping <string, DataRow> points in xValues) { seriesInfo.SeriesPoints.Add(new ChartSeriesPointInfo(points.Key, points.Sum <DataRow>(o => decimal.Parse(o[mapping.YColumn].ToString())))); } chartSeries.Add(seriesInfo); } return(chartSeries); }
/// <summary> /// 根据Datatable转换成ChartSeriesInfo数组,用于在图表中显示 /// </summary> /// <param name="table">数据源</param> /// <param name="mapping">DataTable与Chart的映射信息</param> /// <param name="viewType">图表类型</param> /// <returns></returns> public List <ChartSeriesInfo> ConvertToChartSeries(DataTable table, ChartMappingInfo mapping, string viewType) { if (!table.Columns.Contains(mapping.XColumn)) { throw new ArgumentException(string.Format("X轴字段名{0}在数据源中不存在", mapping.XColumn)); } if (!table.Columns.Contains(mapping.YColumn)) { throw new ArgumentException(string.Format("Y轴字段名{0}在数据源中不存在", mapping.YColumn)); } if (!table.Columns.Contains(mapping.SeriesColumn)) { throw new ArgumentException(string.Format("系列字段名{0}在数据源中不存在", mapping.SeriesColumn)); } List <ChartSeriesInfo> chartSeries = new List <ChartSeriesInfo>(); ChartArgumentType type = (ChartArgumentType)Enum.Parse(typeof(ChartArgumentType), mapping.ArgumentType); DataColumn dc = table.Columns[mapping.YColumn]; Type yType = dc.DataType; //MB.WinBase.MessageBoxEx.Show(yType.FullName); if (type != ChartArgumentType.Extend) { //判断传入的YColumn是否为数值类型 if (!yType.FullName.Equals("System.Decimal") && !yType.FullName.Equals("System.Double") && !yType.FullName.Equals("System.Int32")) { throw new MB.Util.APPException("配置的参数YColumn类型不正确,请配置数值类型!", APPMessageType.DisplayToUser); } } if (type == ChartArgumentType.Extend) { chartSeries = createExtendChart(table, mapping, viewType); } else if (type == ChartArgumentType.Sum) { chartSeries = createSumChart(table, mapping, viewType); } else if (type == ChartArgumentType.Count) { chartSeries = createCountChart(table, mapping, viewType); } else if (type == ChartArgumentType.MaxValue) { chartSeries = createMaxValueChart(table, mapping, viewType); } else if (type == ChartArgumentType.MinValue) { chartSeries = createMinValueChart(table, mapping, viewType); } else if (type == ChartArgumentType.Average) { chartSeries = createAverageChart(table, mapping, viewType); } else { throw new MB.Util.APPException(string.Format("暂不支持 {0} 值类型计算", mapping.ArgumentType), APPMessageType.DisplayToUser); } return(chartSeries); }