トップ ページ > VisualBasic 2010(express) > VisualBasic 2010でのグラフ作成(行列入替え)

VisualBasic 2010でのグラフ作成(行列入替え)

グラフの作成(行列入替え)

今回作成する画面

画像拡大

見ていただいてわかる通り、フォーム下段のDataGridViewをグラフにしています。

DataGridView上ではこのように見たい。
しかし、このDataGridViewの形式のデータでは、グラフ化するのに行列が逆
DataGridViewとは別にグラフ用のDataViewを作って…としても良いが、SQLを複数考えるのも面倒だし…

ということで、グラフに与えるデータで行列を入替えます。
※ついでに、データ検索時のフィルタも表現します。
Public Class Form1

  Private Sub dataFilter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Control_商品名.TextChanged

	'グラフデータのクリア
	Chart1.Series.Clear()

	'■■■■■ 検索フィルター Start ■■■■■
	'検索用コンボボックスの値取得、フィルター設定
	If Me.ComboBox1.Text <> "" Then
		Me.SALESBindingSource.Filter = "商品名 = '" & Me.ComboBox1.Text & "'"
	Else
		Me.SALESBindingSource.Filter = ""
	End If
	'■■■■■ 検索フィルター End ■■■■■

	'フィルター後のデータ件数
	Dim FilDataCount As Integer = Me.SALESBindingSource.Count


	'■■■■■ 系列名の配列作成 Start ■■■■■
	Dim seriesName(200)	'グラフ上の系列データ
	Dim n = 0
	'DataGridView上の[商品名]列名を配列に取得しつつ、グラフ上の系列名に設定
	For Each row As DataRowView In Me.SALESBindingSource
		If FilDataCount <= 200 Then
			seriesName(n) = row.Item("商品名").ToString
			Chart1.Series.Add(seriesName(n))
			n = n + 1
		End If
	Next
	'■■■■■ 系列名の配列作成 End ■■■■■
	'DataGridView上の列数取得
	Dim XDataCount = Me.SALESDataGridView.Columns.Count

	If FilDataCount <> 0 And FilDataCount <= 200 Then
		For i As Integer = 0 To FilDataCount - 1
			'系列毎にグラフの種類を設定
			Chart1.Series(seriesName(i)).ChartType = DataVisualization.Charting.SeriesChartType.Line

			For j As Integer = 1 To (XDataCount) - 1
				'列名取得
				Dim currentColumnNameJ = Me.SALESDataGridView.Columns(j).HeaderText.ToString
				'データ取得
				Dim YVal As String = Me.SALESDataGridView.Rows(i).Cells(Me.SALESDataGridView.Columns(j).Name).Value.ToString
				'If InStr(mainDv.Table.Columns(j).ColumnName, "20") <> 0 Then
				'データをグラフに当てはめる
				Chart1.Series(seriesName(i)).Points.AddXY(currentColumnNameJ, YVal)
				'End If
			Next j
		Next i
	End If
  'グラフの更新
  Me.Chart1.DataBind()
  End Sub

End Class

まず、フィルター機能でデータの絞り込みとDataGridViewの更新を行います。
グラフへは、DataGridViewからデータを取得しています。

その他、DataGridViewからデータを取得する以外にDataViewを使用して、ここからデータ取得でも可。
近く、追記する予定です。