需求:动态生成各产线的品质对比报告,每道品质工序一张对比图表,规划是报表的数据源是品质工序表,每个detailband显示品质工序名称以及这个品质工序的最近7天的各产线品质对比图。
- 根据产线动态生成series柱状图
report.xrChart1.DataSource = dataSet;
List< DevExpress.XtraCharts.Series > series= new List<DevExpress.XtraCharts.Series>();
foreach (DataRow row in tbLine.Rows)
{
String line = row.Field<String>("linecode");
parm["line"] = line;
DataTable tbLineData = await dbf($"select * from raw where linecode=@line", parm, trxId: trxId);
tbLineData.TableName = $"rpt_sum2_raw_{line}";
dataSet.Tables.Add(tbLineData);
/*DataRelation relation = new global::System.Data.DataRelation($"rpt_sum_2_chk_line_{line}", new global::System.Data.DataColumn[] {
dataSet.Tables["rpt_sum2_chk_item"].Columns["pcode"]}, new global::System.Data.DataColumn[] { tbLineData.Columns["pcode"] }, false);
dataSet.Relations.Add(relation); 这个关系在这种需求下不起作用*/
DevExpress.XtraCharts.Series series1 = new DevExpress.XtraCharts.Series();
((SideBySideBarSeriesLabel)series1.Label).TextPattern = "{v:0.00}";
series1.Name = line;
series1.DataSource= new DataView(tbLineData);
//series1.ArgumentDataMember = $"rpt_sum2_raw_{line}.job_date";
//series1.ValueDataMembersSerializable = $"rpt_sum2_raw_{line}.per";
series1.ArgumentDataMember = $"job_date";
series1.ValueDataMembersSerializable = $"per";
series.Add(series1 );
}
report.xrChart1.SeriesSerializable = series.ToArray();
- 为xrChart1增加 beforeprint事件,在这事件里面动态给它filter
因为要根据pcode动态做filter,所以series的datasource要用dataview而不是datatable.
private void xrChart1_BeforePrint(object sender, CancelEventArgs e)
{
string pcode=GetCurrentColumnValue("pcode").ToString();
foreach(Series series in xrChart1.Series)
{
DataView dv= series.DataSource as DataView;
dv.RowFilter = string.Format("pcode='{0}'", pcode);
}
}