注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。
セルに表示するテキストの書式を指定する方法は、こちらで紹介しています。そこで紹介した方法は、DataGridViewCellStyleオブジェクトのFormatプロパティを使用するというものです。ここでは、このような方法ではできないようなより複雑な変換により、表示するテキストを決定する方法を紹介します。なお、表示するテキストではなく、セルの値そのものを変更する方法は、こちらで紹介しています。
これを実現するためには、CellFormattingイベントを使用します。こちらで紹介したように、CellFormattingイベントを使用してセルスタイルを変更できますが、それだけではなく、セルに表示するテキスト(それ以外の型も可能)を変更することもできます。
例えば、"Column1"列(String型)のセルの値を大文字にして表示するには、次のようにします。
'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
//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イベントハンドラで行わないようにしてください。