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

DataGridViewのセルの値によって表示するテキストを変更する

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

セルに表示するテキストの書式を指定する方法は、こちらで紹介しています。そこで紹介した方法は、DataGridViewCellStyleオブジェクトのFormatプロパティを使用するというものです。ここでは、このような方法ではできないようなより複雑な変換により、表示するテキストを決定する方法を紹介します。なお、表示するテキストではなく、セルの値そのものを変更する方法は、こちらで紹介しています。

これを実現するためには、CellFormattingイベントを使用します。こちらで紹介したように、CellFormattingイベントを使用してセルスタイルを変更できますが、それだけではなく、セルに表示するテキスト(それ以外の型も可能)を変更することもできます。

例えば、"Column1"列(String型)のセルの値を大文字にして表示するには、次のようにします。

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 String Then
        '大文字にして表示する
        Dim str As String = e.Value.ToString()
        e.Value = str.ToUpper()
        'フォーマットの必要がないことを知らせる
        e.FormattingApplied = True
    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 string)
    {
        //大文字にして表示する
        string str = e.Value.ToString();
        e.Value = str.ToUpper();
        //フォーマットの必要がないことを知らせる
        e.FormattingApplied = true;
    }
}

CellFormattingイベントハンドラに渡されるDataGridViewCellFormattingEventArgsオブジェクトのValueプロパティには、フォーマットされていないセルの値が格納されています。Valueプロパティに表示用のテキストを代入した後は、FormattingAppliedプロパティをTrueにして、すでにフォーマット済みであることを知らせます。もしそうしないと、セルスタイルのFormat、NullValue、DataSourceNullValue、FormatProviderプロパティの設定により、Valueプロパティに代入した値がさらにフォーマットされて表示されます。

CellFormattingイベントは頻繁に発生しますので、あまり重い処理をCellFormattingイベントハンドラで行わないようにしてください。

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

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