注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。
例えば、数値型の列のセルにアルファベットを入力すると、「DataGridView の既定のエラーダイアログ」というダイアログが表示され、例外が発生したことをユーザーに知らせます。ユーザーがセルに正しくない値を入力するとこのようなダイアログが表示されますが、ユーザーにとっては意味不明の内容ですので、このようなダイアログをそのまま表示させるのは適切ではありません。
このダイアログを表示しないようにするには、DataErrorイベントをハンドルします。この方法は、ヘルプの「DataGridView の既定のエラーダイアログ」でも説明されています。
DataErrorイベントハンドラにより、独自のダイアログを表示するごく簡単なサンプルを示します。
'DataErrorイベントハンドラ Private Sub DataGridView1_DataError(ByVal sender As Object, _ ByVal e As DataGridViewDataErrorEventArgs) _ Handles DataGridView1.DataError If Not (e.Exception Is Nothing) Then MessageBox.Show(Me, _ String.Format("({0}, {1}) のセルでエラーが発生しました。" + _ vbCrLf + vbCrLf + "説明: {2}", _ e.ColumnIndex, e.RowIndex, e.Exception.Message), _ "エラーが発生しました", _ MessageBoxButtons.OK, _ MessageBoxIcon.Error) End If End Sub
//DataErrorイベントハンドラ private void DataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { if (e.Exception != null) { MessageBox.Show(this, string.Format("({0}, {1}) のセルでエラーが発生しました。\n\n説明: {2}", e.ColumnIndex, e.RowIndex, e.Exception.Message), "エラーが発生しました", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
補足:DataErrorイベントハンドラで取得できるDataGridViewDataErrorEventArgsオブジェクトのContextプロパティにより、どのような状態の時にエラーが発生したかを知ることができます。詳しくは、「DataGridViewDataErrorContexts 列挙体」をご覧ください。
また、ThrowExceptionプロパティをTrueにすることにより、DataErrorイベントハンドラが終了した後、例外をスローするようになります。
DataErrorイベントハンドラで取得できるDataGridViewDataErrorEventArgsオブジェクトのCancelプロパティをFalseにすることにより、ユーザーがセルに正しくない値を入力したとしてもエラーが発生せず、セルの値を元に戻すことができるようになります。
'DataErrorイベントハンドラ Private Sub DataGridView1_DataError(ByVal sender As Object, _ ByVal e As DataGridViewDataErrorEventArgs) _ Handles DataGridView1.DataError e.Cancel = False End Sub
//DataErrorイベントハンドラ private void DataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { e.Cancel = false; }
DataErrorイベントハンドラでDataGridView.CancelEditメソッドを呼び出してセルの値を元に戻すこともできます。DataGridViewDataErrorEventArgsオブジェクトのCancelプロパティをFalseにした時は、編集モードが終了しますが、CancelEditメソッドを呼び出した時は、編集モードが終了しません。