注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。
ここでは、セルの値によってセルスタイル(表示するテキストの色、フォント、書式、配置など)を変更する方法を紹介します。なお、ここではセルスタイルの説明はしませんので、セルスタイルに関する知識の無い方は、まずは「DataGridViewにセルスタイルを設定する」をお読みください。
セルの値によってセルスタイルを変更するには、CellFormattingイベントを使用します。CellFormattingイベントは、セルを表示する時(または、表示する文字列を取得する時)に発生します。CellFormattingイベントハンドラでそのセルをどのようなセルスタイルにするかを決定することができます。
以下の例では、"Column1"列(整数型)セルの値が負の場合は背景色を黄色に、0の場合は背景色を赤にしています。
'CellFormattingイベントハンドラ Private Sub DataGridView1_CellFormatting(ByVal sender As Object, _ ByVal e As DataGridViewCellFormattingEventArgs) _ Handles DataGridView1.CellFormatting Dim dgv As DataGridView = CType(sender, DataGridView) 'セルの列を確認 If dgv.Columns(e.ColumnIndex).Name = "Column1" AndAlso _ TypeOf e.Value Is Integer Then Dim val As Integer = CInt(e.Value) 'セルの値により、背景色を変更する If val < 0 Then e.CellStyle.BackColor = Color.Yellow Else If val = 0 Then e.CellStyle.BackColor = Color.Red End If End If End Sub
//CellFormattingイベントハンドラ private void DataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { DataGridView dgv = (DataGridView)sender; //セルの列を確認 if (dgv.Columns[e.ColumnIndex].Name == "Column1" && e.Value is int) { int val = (int)e.Value; //セルの値により、背景色を変更する if (val < 0) { e.CellStyle.BackColor = Color.Yellow; } else if (val == 0) { e.CellStyle.BackColor = Color.Red; } } }
補足:CellFormattingイベントハンドラの「e.CellStyle」に空のセルスタイルやnullを設定すると、表示がおかしくなります(描画されなくなります)。上記の例では、「e.CellStyle.BackColor = Color.Empty」としないでください。
CellFormattingイベントは頻繁に発生しますので、あまり重い処理をCellFormattingイベントハンドラで行わないようにしてください。