C# 如何定义数据源的布局?

C# 如何定义数据源的布局?,c#,charts,dataset,datasource,C#,Charts,Dataset,Datasource,我有一个C#程序,它需要显示一个包含两个系列对象的图表。目前,我只有一个带有2个数据表的数据集。这两张桌子的布局相同。我将数据集绑定到图表的datasource属性,并执行databind()方法。它只显示一个系列 我认为解决方案在于定义一个定制的bindingcontext,但我似乎无法理解它。谁能帮帮我吗?谢谢 下面是我的一些代码: DataSet dataSet = new DataSet(); DataTable dataTable = database

我有一个C#程序,它需要显示一个包含两个系列对象的图表。目前,我只有一个带有2个数据表的数据集。这两张桌子的布局相同。我将数据集绑定到图表的datasource属性,并执行databind()方法。它只显示一个系列

我认为解决方案在于定义一个定制的bindingcontext,但我似乎无法理解它。谁能帮帮我吗?谢谢

下面是我的一些代码:

        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();

我认为您的问题在于重用dataTable变量。您需要为第二个查询创建第二个DataTable,以防止重新分配第一个查询,因为Add函数不复制表中的数据,它只保存对它的引用。尝试更改:

dataTable = database.Query ...


然后将其添加到第二个表中,看看是否可以修复它。

我找到了它。其实很简单。 我所要做的就是分别绑定系列点:

        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。它不会覆盖旧的。很好的解决方案。谢谢另一个给新手的提示是:如果代码顶部还有一行,比如chart.DataSource=myDataSet;等那就把它拿走!因为它将根据此解决方案覆盖单个数据绑定的顶部。一旦我删除了这一行,上面的解决方案就起作用了。呜!
        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", "");