注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。
ユーザーに注意を促すために、DataGridViewにエラーアイコンを表示することができます。エラーアイコンは下図のような赤丸に「!」のアイコンで、マウスポインタを合わせると、エラーテキストがツールヒントとして表示されます。
エラーアイコンは、セルと行ヘッダーに表示することができます(列ヘッダーには表示されません)。
エラーアイコンをセルに表示するには、セルのErrorTextプロパティにエラーテキスト(エラーアイコンにマウスポインタを合わせた時に表示される文字列)を設定します。また、DataGridView.ShowCellErrorsプロパティがTrueである必要があります(デフォルトでTrueです)。
エラーアイコンを行ヘッダーに表示するには、行のErrorTextプロパティにエラーテキストを設定します。また、DataGridView.ShowRowErrorsプロパティがTrueである必要があります(デフォルトでTrueです)。
表示したエラーアイコンを消すには、ErrorTextプロパティに空の文字列(""や、String.Empty)やNothing(C#では、null)を設定します。
'(0, 0)のセルにエラーアイコンを表示する DataGridView1(0, 0).ErrorText = "セルの値を確認してください。" 'インデックスが3の行にエラーアイコンを表示する DataGridView1.Rows(3).ErrorText = "負の値は入力できません。"
//(0, 0)のセルにエラーアイコンを表示する DataGridView1[0, 0].ErrorText = "セルの値を確認してください。"; //インデックスが3の行にエラーアイコンを表示する DataGridView1.Rows[3].ErrorText = "負の値は入力できません。";
なお、セルが編集中の場合は、セルのエラーアイコンは表示されません。編集中でも表示する方法は、「How do I show the error icon when the user is editing the cell?(リンク切れのため、Internet Archiveへのリンク)」で紹介されています。
現在の状態に応じてセルにエラーアイコンを表示するには、CellErrorTextNeededイベントを使用します。
また、大量のデータを扱っており、多くのセルにエラーアイコンを表示する場合は、セルのErrorTextプロパティに値を設定する方法ではなく、CellErrorTextNeededイベントを使用したほうがパフォーマンスが向上します。
同じように、行ヘッダーにエラーアイコンを表示する場合は、RowErrorTextNeededイベントを使用します。
ただしこれらのイベントは、DataSourceプロパティが設定されているか、VirtualModeプロパティがTrueの時にしか発生しません。
以下に、CellErrorTextNeededとRowErrorTextNeededイベントを使用してエラーアイコンを表示する例を示します。
'CellErrorTextNeededイベントハンドラ Private Sub DataGridView1_CellErrorTextNeeded(ByVal sender As Object, _ ByVal e As DataGridViewCellErrorTextNeededEventArgs) _ Handles DataGridView1.CellErrorTextNeeded Dim dgv As DataGridView = CType(sender, DataGridView) 'セルの値が負の整数であれば、エラーアイコンを表示する Dim cellVal As Object = dgv(e.ColumnIndex, e.RowIndex).Value If TypeOf cellVal Is Integer AndAlso CInt(cellVal) < 0 Then e.ErrorText = "負の整数は入力できません。" End If End Sub 'RowErrorTextNeededイベントハンドラ Private Sub DataGridView1_RowErrorTextNeeded(ByVal sender As Object, _ ByVal e As DataGridViewRowErrorTextNeededEventArgs) _ Handles DataGridView1.RowErrorTextNeeded Dim dgv As DataGridView = CType(sender, DataGridView) If dgv("Column1", e.RowIndex).Value Is DBNull.Value AndAlso _ dgv("Column2", e.RowIndex).Value Is DBNull.Value Then e.ErrorText = _ "少なくともColumn1とColumn2のどちらかには値を入力してください。" End If End Sub
//CellErrorTextNeededイベントハンドラ private void DataGridView1_CellErrorTextNeeded(object sender, DataGridViewCellErrorTextNeededEventArgs e) { DataGridView dgv = (DataGridView)sender; //セルの値が負の整数であれば、エラーアイコンを表示する object cellVal = dgv[e.ColumnIndex, e.RowIndex].Value; if (cellVal is int && ((int)cellVal) < 0) { e.ErrorText = "負の整数は入力できません。"; } } //RowErrorTextNeededイベントハンドラ private void DataGridView1_RowErrorTextNeeded(object sender, DataGridViewRowErrorTextNeededEventArgs e) { DataGridView dgv = (DataGridView)sender; if (dgv["Column1", e.RowIndex].Value == DBNull.Value && dgv["Column2", e.RowIndex].Value == DBNull.Value) { e.ErrorText = "少なくともColumn1とColumn2のどちらかには値を入力してください。"; } }
このように、イベントハンドラで「e.ErrorText」にエラーテキストを設定します。もし、セル(または行)のErrorTextプロパティがすでに設定されているならば、「e.ErrorText」には、設定されているErrorTextプロパティの値が入っています。よって、セルのErrorTextプロパティを無視するには、「e.ErrorText」に空の文字列を代入します。