DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridViewのセルの値によってセルスタイルを変更する

注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。

ここでは、セルの値によってセルスタイル(表示するテキストの色、フォント、書式、配置など)を変更する方法を紹介します。なお、ここではセルスタイルの説明はしませんので、セルスタイルに関する知識の無い方は、まずは「DataGridViewにセルスタイルを設定する」をお読みください。

セルの値によってセルスタイルを変更するには、CellFormattingイベントを使用します。CellFormattingイベントは、セルを表示する時(または、表示する文字列を取得する時)に発生します。CellFormattingイベントハンドラでそのセルをどのようなセルスタイルにするかを決定することができます。

以下の例では、"Column1"列(整数型)セルの値が負の場合は背景色を黄色に、0の場合は背景色を赤にしています。

VB.NET
コードを隠すコードを選択
'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
C#
コードを隠すコードを選択
//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イベントハンドラで行わないようにしてください。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。