- - PR -
動的に2次元積層棒グラフを作成する方法について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-06 12:53
お世話になります。
ASP.NETで動的にグラフ(2次元積層棒グラフ)を表示したいと考えております。 データベースはOracleで、以下のようなテーブルからデータを取得→配列に入れ、 それを、Chartコントロールに取り込もうとしておりますが、うまくいきません。 ------------------------------------------- 伝票No |営業担当 |顧客 |受注金額 |受注月度 ------------------------------------------- 000001 |一郎 |XXXX | 100 | 200610 000002 |太郎 |XXXX | 100 | 200602 000003 |一郎 |XXXX | 100 | 200609 000004 |一郎 |XXXX | 150 | 200603 000005 |太郎 |XXXX | 120 | 200605 000006 |一郎 |XXXX | 90 | 200605 000007 |太郎 |XXXX | 30 | 200608 000008 |一郎 |XXXX | 20 | 200611 000009 |一郎 |XXXX | 140 | 200611 000010 |一郎 |XXXX | 170 | 200611 ------------------------------------------- (グラフの完成イメージ) 横軸:月度 縦軸:受注金額(太郎と一郎の受注金額が積層された形) Public Class rptMainReport2 Inherits ActiveReport Public Param1(12) As String //受注月度 Public Param2(1, 12) As String //受注金額 (中略) Private Sub Detail_Format(ByVal sender As Object, ByVal e As System.EventArgs) Handles Detail.Format Dim i As Integer For i = 0 To 2 x_series.Points(i).XValue = Param1(i) ←ここでエラーが出ます。 x_series.Points(i).YValues.Item(0) = Param2(0, i) Next Me.ChartControl.Series.Add(x_series) Me.ChartControl.ChartAreas(0).Axes(0).Title = "月度" End Sub End Class ------------------------------------------------------------- インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 パラメータ名: index ------------------------------------------------------------- よくわかっておりませんが、配列の上限を超えているみたいなので、はじめにコレクションオブジェクト?の要素を確定しなくてはいけないのかもしれません。 中途半端で申し訳ございませんが、どなたかアドバイスいただけたら幸いです。 よろしくお願いします。 | ||||||||
|
投稿日時: 2006-12-06 12:59
上記少し訂正させてください。
(中略) Private Sub Detail_Format(ByVal sender As Object, ByVal e As System.EventArgs) Handles Detail.Format Dim i As Integer Dim x_series As New DataDynamics.ActiveReports.Chart.Series ←訂正です。上記コピーするときにここが抜けてました。 For i = 0 To 2 x_series.Points(i).XValue = Param1(i) ←ここでエラーが出ます。 x_series.Points(i).YValues.Item(0) = Param2(0, i) Next Me.ChartControl.Series.Add(x_series) Me.ChartControl.ChartAreas(0).Axes(0).Title = "月度" End Sub | ||||||||
|
投稿日時: 2006-12-06 13:02
その行で例外が発生しているとして、Param1(i) が原因なのか、 Points(i) が原因なのか切り分けをしていますか? (例外の内容と宣言部分を見る限り、Param1() が原因ではなさそうですが) x_series というのが、何者かわかりませんので、回答はここまでですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-12-06 13:07
入れ違いでした。
なるほど、DataDynamics.ActiveReports.Chart.Series だったのですね。 これなら、回答できます。
Points コレクションについても、DataDynamics.ActiveReports.Chart.DataPoint をインスタンス化して、 そのインスタンスを Points コレクションに Add しなくてはいけません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-12-06 13:12
じゃんねねっと様
回答ありがとうございます。 x_seriesというのは、以下で宣言しているChartコントロールの一部のようです。 正直自分でも使い方がよくわかっておりません。 Dim x_series As New DataDynamics.ActiveReports.Chart.Series とりあえずもう少し調べてみます。 | ||||||||
|
投稿日時: 2006-12-06 13:26
じゃんぬねっと様
またまた入れ違いでした。 即答ありがとうございます。 上記のように試してみます。 | ||||||||
|
投稿日時: 2006-12-06 13:31
細かいことですが、
コントロールではなく、DataDynamics.ActiveReports.Chart.Series 型の変数です。 中には、DataDynamics.ActiveReports.Chart.Series 型のインスタンスが格納されています。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-12-06 14:32
(じゃんぬねっと様をはじめ)みなさま
お世話になります。 今回の件、うまく表示することができました。 以下、きれいではないかもしれませんが、サンプルコードです。 ----------------------------------------------------------------------------- Private Sub Detail_Format(ByVal sender As Object, ByVal e As System.EventArgs) Handles Detail.Format Dim i As Integer Dim j As Integer For j = 0 To 0←今は意味はないですが、拡張性を持たすつもりです。 Dim x_series As New DataDynamics.ActiveReports.Chart.Series '凡例テキスト追加 x_series.LegendText = "一郎" Me.ChartControl.Series.Add(x_series) For i = 0 To UBound(Param1) 'DataPointをインスタンス化 Dim x_datapo As New DataDynamics.ActiveReports.Chart.DataPoint '取得したデータをセット x_datapo.XValue = Param1(i) x_datapo.YValues.Item(0) = Param2(0, i, 0) 'Chartコントロールに追加 Me.ChartControl.Series(j).Points.Add(x_datapo) x_datapo = Nothing Next x_series = Nothing Next Me.ChartControl.ChartAreas(0).Axes(0).Title = "月度" End Sub ----------------------------------------------------------------------------- >じゃんぬねっと様 背中を押してくださって、ありがとうございました。 少し前に進むことができました。 今後もお世話になることがあると思いますが、どうぞよろしくお願いします。 |