今回は、VB.NETのDataGridViewの基本的な使い方と設定方法についてご紹介します。
Windowsフォームアプリケーションの開発において、DataGridViewコントロールはテーブル形式でデータを表示・編集できるため、多くの場面で活用されています。
列や行の操作はもちろんのこと、データソースとの連動やスタイル設定など、多彩な機能を備えている点が特徴です。
ここでは、VB.NETでDataGridViewを使う際の基礎から、具体的なコード例、注意点までを順に解説します。
DataGridViewとは
DataGridViewは、フォーム上で表形式のデータを表示・編集するためのコントロールです。
行や列ごとに管理ができ、並べ替えや削除などの操作にも柔軟に対応できます。
データの設定方法は主に
- 手動でセルに値を追加する方法
- DataTableやList(Of T)などのコレクションとDataSourceを使ったバインド方式
の2パターンがあります。
用途に応じて選択することで、効率的な開発が可能になります。
DataGridViewの基本的な使い方
ここでは、Visual Studioのデザイナ画面を利用して、DataGridViewをフォームに配置し、基本的な設定を行う流れを解説します。
1. フォームへの配置
ツールボックスからDataGridViewをドラッグ&ドロップし、フォームに配置します。
プロパティウィンドウを使って、Size(サイズ)やLocation(位置)、BackgroundColor(背景色)などの外観を設定できます。
2. 列と行の設定
DataGridViewの列はプロパティから直接追加してもよいですが、コード上でも設定できます。
手動で列数や列ヘッダー名を指定し、行を追加する方法は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' DataGridViewの基本設定 With DataGridView1 ' 列数を3列に設定 .ColumnCount = 3 ' 列ヘッダー名を設定 .Columns(0).Name = "ID" .Columns(1).Name = "名前" .Columns(2).Name = "年齢" ' 行を追加 Dim row1() As String = {"1", "Taro", "25"} Dim row2() As String = {"2", "Hanako", "30"} .Rows.Add(row1) .Rows.Add(row2) ' ユーザーが自由に行を追加できないようにする .AllowUserToAddRows = False End With End Sub |
上記の方法だと、行やセルの編集を個別に行う形になります。
3. データソースにバインドする方法
DataSourceプロパティを用いて、DataTableやList(Of T)などのコレクションをバインドすると、コードがシンプルになりメンテナンスも容易です。
以下の例では、DataTableを生成して、DataGridViewに直接バインドします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Private Sub BindData() ' DataTableを作成 Dim dt As New DataTable dt.Columns.Add("ID", GetType(Integer)) dt.Columns.Add("名前", GetType(String)) dt.Columns.Add("年齢", GetType(Integer)) ' 行データを追加 dt.Rows.Add(1, "Taro", 25) dt.Rows.Add(2, "Hanako", 30) ' DataGridViewにバインド DataGridView1.DataSource = dt End Sub |
この方法で表示されるデータは、バインド元であるDataTableを更新すると、その内容がDataGridViewにも反映されます。
具体的なコード例
ここからは、使い勝手を向上させるための具体的なコード例をご紹介します。
1. 手動設定のサンプルコード
フォームがロードされた時に列と行を設定し、デザインも少し加えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load With DataGridView1 .ColumnCount = 3 .Columns(0).Name = "ID" .Columns(1).Name = "名前" .Columns(2).Name = "年齢" ' 行データの追加 .Rows.Add(New String() {"1", "Taro", "25"}) .Rows.Add(New String() {"2", "Hanako", "30"}) ' ヘッダーの背景色を設定 .ColumnHeadersDefaultCellStyle.BackColor = Color.LightBlue ' 行全体を選択する設定 .SelectionMode = DataGridViewSelectionMode.FullRowSelect ' ユーザーによる行追加を不可にする .AllowUserToAddRows = False End With End Sub |
実行してみると、指定した列ヘッダーと行データがDataGridViewに表示されます。
以下のような画面を想定した実行結果です。
ID 名前 年齢
1 Taro 25
2 Hanako 30
2. データバインドのサンプルコード
DataSourceにより、DataTableをバインドする例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Private Sub BindDataToGrid() Dim dt As New DataTable dt.Columns.Add("ID", GetType(Integer)) dt.Columns.Add("名前", GetType(String)) dt.Columns.Add("年齢", GetType(Integer)) ' 行を追加 dt.Rows.Add(1, "Taro", 25) dt.Rows.Add(2, "Hanako", 30) ' DataGridViewにバインド DataGridView1.DataSource = dt End Sub |
この方法では、DataTableの編集・更新がそのままDataGridViewに反映されるため、アプリケーション全体の設計がシンプルになります。
3. イベントハンドリングの例
DataGridViewは、セルをクリックした際や編集中などにさまざまなイベントを発生させます。
以下は、セルをクリックしたときに、そのセルの値をメッセージボックスで表示する例です。
1 2 3 4 5 6 |
Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 Then Dim cellValue = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value MessageBox.Show("セルの値: " & cellValue.ToString()) End If End Sub |
ユーザーがデータをクリックしたタイミングで追加処理を入れるなど、柔軟に拡張できます。
設定時の注意点
DataGridViewを扱う際、以下の点に注意すると、より安定したアプリケーションを開発できます。
- DataSourceと手動追加の使い分け
DataSourceでバインドすると、更新はバインド元に依存します。手動入力との混在は意図しない動作を招きやすい点に注意してください。
- 大量データのパフォーマンス
データの件数が非常に多い場合は、仮想モードやページング機能を検討するとパフォーマンス向上が期待できます。
- 編集モードの管理
意図しない編集を避けたい場合は、ReadOnlyプロパティやAllowUserToAddRowsプロパティを適切に設定することが重要です。
- セルイベントの衝突
同時に複数のイベントが発生する場合もあるため、イベントハンドリングの順序や条件分岐に注意してください。
まとめ
DataGridViewは、表形式のデータ表示・編集を手軽に実装できる非常に便利なコントロールです。
手動設定とデータバインドを使い分けながら、列やセル、イベントの管理を最適化することで高い拡張性を維持できます。
必要に応じてセルスタイルや編集モードなどを柔軟に変更し、完成度の高いフォームアプリケーションを目指してみてください。