自分のブログ名

sheephumanのブログ

広汎性発達障害と診断されたASD孤立型。

【VB】DataGridViewの内容をChartに表示する

Teratailから参考になるものをみつけました。

teratail.com

質問者の方は分からなかったらしいですが、弄ってたらピンと来まして。
ちなみに普段はVBなんて弄らないので、C#に書き直すつもりです。


こちらがC#
sheephuman.hatenablog.com

動画

www.youtube.com


回答されたコードにちょっと手を加えました。


コード

 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

 'データの取得
 Dim ds As DataSet = GetData()

 'Chartコントロールにデータソースを設定
 Chart1.DataSource = ds

 '初期化
 Chart1.Series.Clear()

 'Chartコントロールにタイトルを設定
 Chart1.Titles.Clear()

 'グラフの種類,系列,軸の設定
 For I As Integer = 1 To ds.Tables(0).Columns.Count - 1
 '列名の取得
 Dim columnName As String = ds.Tables(0).Columns(I).ColumnName


 '系列の設定
 Chart1.Series.Add(columnName)


 'グラフの種類
 Chart1.Series(columnName).ChartType = DataVisualization.Charting.SeriesChartType.Column


 'X軸
 Chart1.Series(columnName).XValueMember = ds.Tables(0).Columns(0).ColumnName.ToString
 Chart1.ChartAreas(0).AxisX.MajorGrid.Enabled = False
 Chart1.ChartAreas(0).AxisX.MinorGrid.Enabled = False

 'Y軸
 Chart1.Series(columnName).YValueMembers = columnName

 Chart1.Series(columnName).Label = "#VAL{C}"



 Next

 End Sub



 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click


 'Dictionaryオブジェクトの宣言
 Dim myDic As Object
 myDic = CreateObject("Scripting.Dictionary")
 myDic.Add("orange", 1)
 myDic.Add("apple", 2)
 myDic.Add("melon", 3)
 myDic.Add("sheep", 4)
 myDic.Add("safoal", 5)

 DataGridView1.Rows.Add()

For i = 0 To DataGridView1.Rows.Count - 2
 DataGridView1(0, i).Value = myDic.Keys(Int(5 * Rnd()))
 DataGridView1(1, i).Value = Int(1000 * Rnd() + 1)
 DataGridView1(2, i).Value = Int(1000 * Rnd() + 1)
 Next


 Button1_Click(sender, e)

 End Sub


  Private Function GetData() As DataSet

        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim dtRow As DataRow

        '列の作成
        dt.Columns.Add("")
        dt.Columns.Add(DataGridView1.Columns(1).HeaderText)
        dt.Columns.Add(DataGridView1.Columns(2).HeaderText)

        ds.Tables.Add(dt)




        '★★★データの追加★★★
        For i = 0 To DataGridView1.Rows.Count - 1
            dtRow = ds.Tables(0).NewRow


            dtRow(0) = DataGridView1(0, i).Value
            dtRow(1) = DataGridView1(1, i).Value
            dtRow(2) = DataGridView1(2, i).Value

            ds.Tables(0).Rows.Add(dtRow)
        Next

        Return (ds)

    End Function


メソッドにした方が良いんだろうけど面倒だった。
VBって書きづらいですね。Button2をクリックすると全部実行されます。
はてなって素でシンタックスハイライトされるんでいいですね。


実行結果

 ちょっとした発見もしまして、こんな風に表示できちゃうという。

難点なのはこのままだと集計とか出来ない事で、ASIEnurableメソッドで何とか出来ないかと考えているところです。

f:id:sheephuman:20200705163934p:plain