我有一个C#程序,它需要显示一个包含2个序列对象的图表。目前,我只有一个包含2个数据表的数据集。这两张表的布局相同。我将数据集绑定到图表的datasource属性,并执行databind()方法。它只显示一个系列。
我认为解决方案在于定义一个自定义绑定上下文,但我似乎无法理解。有人能帮帮我吗?谢谢
以下是我的一些代码:
DataSet dataSet = new DataSet();
DataTable dataTable = database.Query("select sum(amount) as monthamount, month(transdate) as month from transaction where year(transdate)=" + balanceDateTimePicker.Value.Year + " group by month");
dataSet.Tables.Add(dataTable);
dataTable = database.Query("select sum(amount) as monthamount, month(transdate) as month from transaction where year(transdate)=" + balanceDateTimePicker.Value.AddYears(-1).Year + " group by month");
dataSet.Tables.Add(dataTable);
reoccuranceChart.DataSource = dataSet;
System.Windows.Forms.DataVisualization.Charting.Series series = reoccuranceChart.Series["Series1"];
series.XValueMember = "month";
series.YValueMembers = "monthamount";
series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
series.IsVisibleInLegend = false;
series = reoccuranceChart.Series["Series2"];
series.XValueMember = "month";
series.YValueMembers = "monthamount";
series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
series.IsVisibleInLegend = false;
reoccuranceChart.DataBind();
我找到了它。它实际上相当简单。我所要做的就是,单独绑定系列。点:
DataSet dataSet = new DataSet();
DataTable dataTable = database.Query("select sum(amount) as monthamount, month(transdate) as month from transaction where year(transdate)=" + balanceDateTimePicker.Value.Year + " group by month");
dataSet.Tables.Add(dataTable);
dataTable = database.Query("select sum(amount) as monthamount, month(transdate) as month from transaction where year(transdate)=" + balanceDateTimePicker.Value.AddYears(-1).Year + " group by month");
dataSet.Tables.Add(dataTable);
System.Windows.Forms.DataVisualization.Charting.Series series = reoccuranceChart.Series["Now"];
series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
//series.IsVisibleInLegend = false;
series.Points.DataBind(dataSet.Tables[0].DefaultView, "month", "monthamount", "");
series = reoccuranceChart.Series["Last year"];
series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
//series.IsVisibleInLegend = false;
series.Points.DataBind(dataSet.Tables[1].DefaultView, "month", "monthamount", "");
我认为您的问题在于重用dataTable变量。您需要为第二个查询创建第二个DataTable,以防止重新分配第一个,因为Add函数不会复制表中的数据,它只是保存对它的引用。请尝试更改:
dataTable = database.Query ...
至
DataTable dataTable2 = database.Query...
然后将其添加到第二个表中,看看是否修复了它。