訪問して頂きありがとうございます。まさふくろーです。
この記事では、DataGridViewコントロールのコンボボックスで選択した値を取得する方法をご紹介します。
目次
DataGridViewコントロールのコンボボックスで選択した値を取得する
DataGridView.Rows(行番号).Cells(列のインデックス).Value
サンプルプログラム
DataGridViewに表示する処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim serverName As String = "TEST-PC\SQLEXPRESS" Dim dataBase As String = "AdventureWorksLT2017" Dim userid As String = "test" Dim pwd As String = "test" Dim dread As SqlClient.SqlDataReader Dim column As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn Try column.Items.Add(String.Empty) column.Items.Add("りんご") column.Items.Add("みかん") column.Items.Add("いちご") DataGridView1.Columns.Insert(0, column) DataGridView1.Columns(0).HeaderText = "種類" Using conn As New SqlClient.SqlConnection() conn.ConnectionString = " Data Source = " & serverName & ";Initial Catalog = " & dataBase & ";User ID = " & userid & ";Password =" & pwd conn.Open() Using cmd As New SqlClient.SqlCommand() cmd.Connection = conn cmd.CommandText = "SELECT * " & ControlChars.NewLine & "FROM SalesLT.SalesOrderHeader " & ControlChars.NewLine & "WHERE SalesOrderID BETWEEN @SalesOrderID_St AND @SalesOrderID_End " & ControlChars.NewLine & "ORDER BY SalesOrderID " & ControlChars.NewLine cmd.Parameters.Add("@SalesOrderID_St", SqlDbType.Int).Value = 71774 cmd.Parameters.Add("@SalesOrderID_End", SqlDbType.Int).Value = 71816 dread = cmd.ExecuteReader() Do While dread.Read() Dim iIdx As Integer Dim SalesOrder_ID As String, Order_Date As String, Due_Date As String, SalesOrder_Number As String iIdx = dread.GetOrdinal("SalesOrderID") SalesOrder_ID = dread.GetInt32(iIdx) iIdx = dread.GetOrdinal("OrderDate") Order_Date = dread.GetDateTime(iIdx) iIdx = dread.GetOrdinal("DueDate") Due_Date = dread.GetDateTime(iIdx) iIdx = dread.GetOrdinal("SalesOrderNumber") SalesOrder_Number = dread.GetString(iIdx) DataGridView1.Rows.Add(String.Empty, SalesOrder_ID, Order_Date, Due_Date, SalesOrder_Number) Loop End Using DataGridView1.Columns(0).Width = 70 Label1.Text = "表示が完了しました。" End Using Catch ex As Exception Label1.Text = Err.Description End Try End Sub End Class |
2 | 「注文データを表示」ボタンクリック時に以下処理を行う。 |
4~7 | 接続先データベースの情報を、変数に代入。 |
9 | DataGridViewComboBoxColumn型の変数「column」を宣言、インスタンス化。 |
13~16 | 「DataGridView」コントロールのコンボボックスに設定する項目を追加。 |
18 | 「DataGridView」コントロールの1列目に列を挿入する。 |
20 | 「DataGridView」コントロールの列ヘッダーに「種類」を表示する。 |
22 | SqlConnectionクラスのインスタンス化。(Usingステートメントでリソース開放を自動化) |
24~28 | ConnectionStringプロパティにデータベース情報を設定。 |
30 | データベースに接続。 |
32 | SqlCommandクラスのインスタンス化。(Usingステートメントでリソース開放を自動化) |
34 | SQL文を実行するために、24~28行目で設定したデータベース情報と同じ情報をConnection プロパティに設定。 |
36~40 |
レコードを抽出するSQL文をCommandTextプロパティに設定。 |
39行目の「@」マークは、以下42~43行目で設定するパラメータを使用する際に記述します。 | |
42 | 「SalesOrderHeader」テーブルの「SalesOrderID」列の開始番号に、値「71774」を設定する。 |
43 | 「SalesOrderHeader」テーブルの「SalesOrderID」列の終了番号に、値「71816」を設定する。 |
45 | SQL文(SalesOrderID列の値が71774~71816までのレコードを抽出する)を実行し、実行結果をSqlDataReader型の変数「dread」に代入。 |
47 | 変数「dread」の値が「True」の間(抽出したレコード件数分)、以下処理を繰り返す。 |
52 | 「SalesOrderID」列の列番号を取得し、Integer型の変数「iIdx」に代入。 |
53 | 「SalesOrderID」列の値を取得し、String型の変数「SalesOrder_ID」に代入。 |
55 | 「OrderDate」列の列番号を取得し、Integer型の変数「iIdx」に代入。 |
56 | 「OrderDate」列の値を取得し、String型の変数「Order_Date」に代入。 |
58 | 「DueDate」列の列番号を取得し、Integer型の変数「iIdx」に代入。 |
59 | 「DueDate」列の値を取得し、String型の変数「Due_Date」に代入。 |
61 | 「SalesOrderNumber」列の列番号を取得し、Integer型の変数「iIdx」に代入。 |
62 | 「SalesOrderNumber」列の値を取得し、String型の変数「SalesOrder_Number」に代入。 |
64 | DataGridViewコントロールにデータを表示する。(コンボボックスにはデータを表示しないので「Empty値」を設定) |
70 | DataGridViewコントロールの1列目(コンボボックス)の幅を70ピクセルにする。 |
72 | 処理が正常に終了したら、正常終了のメッセージをラベルに表示する。 |
76 | 処理の実行中にエラーが発生した場合、 |
78 | エラー内容を取得し、ラベルに表示する。 |
DataGridViewのコンボボックスの値を取得する処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Public Class Form1 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim dgvRowCnt As Integer Dim i As Integer Dim ComboValue As String Dim str As String = String.Empty Try dgvRowCnt = DataGridView1.Rows.Count For i = 0 To dgvRowCnt - 1 ComboValue = DataGridView1.Rows(i).Cells(0).Value If ComboValue <> String.Empty Then str &= i + 1 & "行目" & Space(2) & ComboValue & ControlChars.NewLine End If Next Label1.Text = str Catch ex As Exception Label1.Text = Err.Description End Try End Sub End Class |
2 | 「DataGridViewコントロールのコンボボックスの値を取得」ボタンクリック時に以下処理を行う。 |
11 | DataGridViewの行数を取得し、Integer型の変数「dgvRowCnt」に代入。 |
13 | DataGridViewの行数分、以下処理を繰り返す。 |
15 | コンボボックスの値を取得し、String型の変数「ComboValue」に代入。 |
17 | 取得した値が「Empty」値でない場合、 |
19 | DataGridViewの行数とコンボボックスの値を、String型の変数「str」に追加していく。 |
25 | 処理が完了したら、コンボボックスに値が設定されている行数と値をラベルに表示する。 |
27 | 処理の実行中にエラーが発生した場合、 |
29 | エラー内容を取得し、ラベルに表示する。 |
関連記事
DataGridViewコントロールにコンボボックスを表示する
【VB.NET】DataGridViewコントロールにコンボボックスを表示するには?
DataGridViewコントロールの列の幅を変更する
【VB.NET】DataGridViewコントロールの列の幅を変更するには?
DataGridViewコントロールの行数を取得する
【VB.NET】DataGridViewコントロールの行数を取得するには?
DataGridViewコントロールにデータを表示する
【VB.NET】DataGridViewコントロールにデータを表示するには?
テーブルのデータを抽出する
データベースに接続
Usingステートメント
【VB.NET】UsingステートメントでDisposeメソッドの呼び出しを自動化する
構造化例外処理
最後まで読んでいただき、ありがとうございました!
本のまとめ関連記事はこちら