エラーセルを赤色にするなど、DataGridViewの色を動的に変更するにはCellFormattingイベントを使用します。
解説
CellFormattingイベントはセルの値が変更された時など、セルを描画するときに発生するイベントです。 イベントの引数で描画対象セルのインデックスやセル値が取得でき、これらの情報を使用してセルのスタイル(背景色やフォント色)を設定します。イベント引数(DataGridViewCellFormattingEventArgs)の主要なプロパティ
プロパティ | 説明 |
---|---|
CellStyle | 対象セルのスタイル(背景色やフォント色)。スタイルの設定方法はこちら。 |
ColumnIndex | 対象セルの列インデックス |
RowIndex | 対象セルの行インデックス |
Value | 対象セルの値 |
サンプルコード
次のサンプルでは、"判定"列が未入力になっているセルの背景色とフォント色を変更しています。-
C#
private void Form1_Load(object sender, EventArgs e) { // ダミーデータをデータグリッドビューに表示 DataTable dataTable = new DataTable(); dataTable.Columns.Add("項目", typeof(string)); dataTable.Columns.Add("判定", typeof(string)); dataTable.Rows.Add("データ1", "ok"); dataTable.Rows.Add("データ2", null); dataTable.Rows.Add("データ3", "ng"); this.dataGridView1.DataSource = dataTable; } /// <summary> /// セルの内容が、表示用に書式指定されなければならないときに発生します /// </summary> private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { DataGridView dataGridView = (DataGridView)sender; // イベントのColumnIndexとDataGridViewのColumns[].Nameで列を判断 if (dataGridView.Columns[e.ColumnIndex].Name == "判定") { // Cellの値で分岐させ、色を変える if (e.Value == null || e.Value == DBNull.Value) { // 値が未設定の場合、Cellの背景色を赤・フォント色を白にする e.CellStyle.BackColor = System.Drawing.Color.Red; e.CellStyle.ForeColor = System.Drawing.Color.White; } else { // 値が設定されている場合、Cellの背景色を白・フォント色を黒にする e.CellStyle.BackColor = System.Drawing.Color.White; e.CellStyle.ForeColor = System.Drawing.Color.Black; } } }
-
VB.NET
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' ダミーデータをデータグリッドビューに表示 Dim dataTable As New DataTable dataTable.Columns.Add("項目", GetType(String)) dataTable.Columns.Add("判定", GetType(String)) dataTable.Rows.Add("データ1", "ok") dataTable.Rows.Add("データ2", Nothing) dataTable.Rows.Add("データ3", "ok") Me.DataGridView1.DataSource = dataTable End Sub ''' <summary> ''' セルの内容が、表示用に書式指定されなければならないときに発生します ''' </summary> Private Sub DataGridView1_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting Dim dataGridView As DataGridView = CType(sender, Windows.Forms.DataGridView) ' イベントのColumnIndexとDataGridViewのColumns().Nameで列を判断 If dataGridView.Columns(e.ColumnIndex).Name = "判定" Then ' Cellの値で分岐させ、色を変える If e.Value Is Nothing Or e.Value Is DBNull.Value Then ' 値が未設定の場合、Cellの背景色を赤・フォント色を白にする e.CellStyle.BackColor = System.Drawing.Color.Red e.CellStyle.ForeColor = System.Drawing.Color.White Else ' 値が設定されている場合、Cellの背景色を白・フォント色を黒にする e.CellStyle.BackColor = System.Drawing.Color.White e.CellStyle.ForeColor = System.Drawing.Color.Black End If End If End Sub
サンプルコードのダウンロード
サンプルコードの実行には Microsoft Visual Studio 2008 以上のバージョンが必要です。 2008以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。検証環境
- Microsoft Visual Studio 2008 Version 9.0.30729.4462 QFE Edition: Professional
- Microsoft .NET Framework Version 3.5 SP1
- Microsoft Windows 7 Professional Service Pack 1 (Microsoft Windows NT 6.1 (7601))