2012-03-12 49 views
1

我有需要顯示圖表2級系列的對象C#程序。目前我只有一個包含2個數據表的數據集。這兩個表具有相同的佈局。我結合數據集到該圖表的數據源屬性,並執行數據綁定()方法。它只顯示一個系列。如何定義數據源的佈局?

我認爲解決的辦法是定義一個自定義的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(); 

回答

0

我覺得你的問題是在你的dataTable變量的重用。您需要創建一個數據表二爲第二個查詢,以防止重新分配第一,因爲添加的功能並不在表中複製數據,它只是持有對它的引用。嘗試改變:

dataTable = database.Query ... 

DataTable dataTable2 = database.Query... 

然後將其添加爲第二個表,看看能否解決。

+0

謝謝,但這不是問題。在圖表中我總是得到第一個查詢的結果。在查詢函數中創建一個新的DataTable。它不會覆蓋舊的。 – NoAlternative 2012-03-12 22:13:55

1

我發現了它。這其實很簡單。 我所要做的就是,單獨綁定series.points:

 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", ""); 
+0

偉大的解決方案。謝謝!新玩家的另一個提示是:如果你的代碼的頂部仍然有一行,如chart.DataSource = myDataSet;等等...然後刪除它!因爲它會根據此解決方案在單個數據綁定的頂部重新打開。一旦我刪除這一行,上面的解決方案工作。活泉! – Aaron 2012-12-07 08:01:49