タイトル | : チャートコントロール(複数テーブル) |
記事No | : 10724 |
投稿日 | : 2012/03/10(Sat) 16:41 |
投稿者 | : oga |
はじめまして。
開発環境:VB2010pro Win7(32bit pro)
初めて投稿させていただきます。 チャートコントロールを利用しY1,2軸両成分の折線グラフに それぞれ別のCSVファイルを読み込み描画出来ないかと 考えているのですがどうもY2軸側の表示するところで 処理がとまってしまうようです。 もしご存知の方がいらっしゃいましたらご教授頂ければ と思っております。 作業の流れでは 1)フォームロード時 Y1及び2軸の対象CSVを1つのDataSetに2つのテーブルでセット ※(Y1軸CSVファイルは10分サンプリングピッチデータ Y2軸CSVファイルは60分サンプリングピッチデータ) 2)コマンドボタンをクリック→描画開始 Y2軸を描画しようとするときに列名称が見つかりませんとの エラーが発生し処理がとまってしまう。 どうもY2軸のテーブル名称を指定してもY1軸側のテーブルを 読み込んでいるようでした。(※下記のY2参照CSVの1行目を Date,1,2に変更するとY1軸側のデータが描画されました) このコントロール自体は初めて使うので仕様なのか、記述ミス なのかもちょっとわからない状態です。 どなたかお分かり方がいらっしゃいましたらよろしくお願いいたします。
下記にソースとcsvの中身を記述します ’以下ソース−−−−−−−−−−−−−−−−−−−−−−−−−−− Private ds As New DataSet Private DBColumsY1 As Integer, DBColumsY2 As Integer 'フォームロード時 Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load DBColumsY1 = ChartDataOpen(Application.StartupPath(), "temp1.csv","tbl1") DBColumsY2 = ChartDataOpen2(Application.StartupPath(), "temp2.csv","tbl2") End Sub 'CSVデータセット Private Function ChartDataOpen(ByVal FolderPath As String,_ ByVal FileName As String,ByVal StrTBL as string) Dim DBColums As Integer = 0 Using cn As New System.Data.OleDb.OleDbConnection Dim csvFileName As String = FileName cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FolderPath & ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited""" Using da As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM " & csvFileName, cn) da.Fill(ds, StrTBL) 'データの系列数を取得 DBColums = ds.Tables(StrTBL).Columns.Count - 1 End Using End Using Return DBColums End Function '描画開始 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs)_ Handles Button1.Click With Chart1 .DataSource = ds 'Y1軸 For i As Integer = 1 To DBColumsY1 Dim columnName As String = ds.Tables("tbl1").Columns(i) _ .ColumnName.ToString() '系列の設定 .Series.Add(columnName) .Series(columnName).ChartType = _ DataVisualization.Charting.SeriesChartType.FastLine 'X 軸のラベルテキストの読込・設定 .Series(columnName).XValueMember = _ ds.Tables("tbl1").Columns(0).ColumnName.ToString() 'グラフ用のデータの読込・設定 .Series(columnName).YValueMembers = columnName Next 'Y2軸 For i As Integer = 1 To DBColumsY2 Dim columnName As String = _ ds.Tables("tbl2").Columns(i).ColumnName.ToString() '系列の設定(CH名称・和名称) .Series.Add(columnName) .Series(columnName).ChartType = _ DataVisualization.Charting.SeriesChartType.StepLine 'X 軸のラベルテキストの読込・設定 .Series(columnName).XValueMember = _ ds.Tables("tbl2").Columns(0).ColumnName.ToString() 'グラフ用のデータの読込・設定 .Series(columnName).YValueMembers = columnName .Series(columnName).YAxisType = AxisType.Secondary Next
.ChartAreas("ChartArea1").AxisY.Maximum = 30 .ChartAreas("ChartArea1").AxisY.Minimum = -30 .ChartAreas("ChartArea1").AxisY2.Maximum = 150 .ChartAreas("ChartArea1").AxisY2.Minimum = -50 End With End Sub '以上ソース-------------------------------------
'Y1軸側参照csv------------------------------------- Date,P.001,P.002 2012/3/1 0:00,0.02,-0.02 2012/3/1 0:10,0,0 2012/3/1 0:20,0.02,-0.02 2012/3/1 0:30,0.02,0 2012/3/1 0:40,0.02,-0.02 2012/3/1 0:50,0,-0.02 2012/3/1 1:00,0.02,-0.02 2012/3/1 1:10,0,-0.02 2012/3/1 1:20,0.02,-0.02 2012/3/1 1:30,0,-0.02 2012/3/1 1:40,0,-0.02 2012/3/1 1:50,0,0 2012/3/1 2:00,0,-0.02 'Y2軸側参照csv------------------------------------- Date,K01,K02 2012/03/01 00:00:00,0,0 2012/03/01 01:00:00,1.63,0 2012/03/01 02:00:00,3.63,0 2012/03/01 03:00:00,4.63,1.2 2012/03/01 04:00:00,5.63,2.4 2012/03/01 05:00:00,6.63,2.8 2012/03/01 06:00:00,7.63,3.2
|