2012-03-12 8 views
1

2つのserieオブジェクトを持つグラフを表示する必要があるC#プログラムがあります。現在、私はちょうど2つのデータセットを持つデータセットを持っています。 2つのテーブルのレイアウトは同じです。私は、データセットをチャートのdatasourceプロパティにバインドし、databind()メソッドを実行します。 1つのセリフだけを表示します。データソースのレイアウトを定義するにはどうすればよいですか?

私は解決策がカスタムバインディングコンテキストを定義することにあると思っていますが、私はそれを理解できないようです。誰か助けてくれますか?ありがとう。以下は

は、私のコードの一部です:

 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変数のあなたの再利用であると思います。 Add関数はテーブルのデータをコピーせず、参照を保持するだけなので、最初のデータの再割り当てを防ぐために、2番目のクエリの2番目のDataTableを作成する必要があります。変更してみてください:

DataTable dataTable2 = database.Query... 

dataTable = database.Query ... 

後、第2のテーブルとしてそれを追加し、それはそれを修正するかどうかを確認します。

+0

おかげで、それは問題ではありません。グラフでは、常に最初のクエリの結果が得られます。クエリ関数では、新しいDataTableが作成されます。それは古いものを上書きしません。 – NoAlternative

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のようなコードの先頭にまだ行がある場合は、 etc ...そしてそれを取り除く!このソリューションによれば、個々のデータバインディングの先頭を突破することになります。一旦この行を削除すると、上記の解決策が働いた。 Woot! – Aaron

関連する問題