DOBON.NET

ユーザーがDataGridViewのセルに正しくない値を入力した時に発生するエラーを捕捉する

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

例えば、数値型の列のセルにアルファベットを入力すると、「DataGridView の既定のエラーダイアログ」というダイアログが表示され、例外が発生したことをユーザーに知らせます。ユーザーがセルに正しくない値を入力するとこのようなダイアログが表示されますが、ユーザーにとっては意味不明の内容ですので、このようなダイアログをそのまま表示させるのは適切ではありません。

このダイアログを表示しないようにするには、DataErrorイベントをハンドルします。この方法は、ヘルプの「DataGridView の既定のエラーダイアログ」でも説明されています。

DataErrorイベントハンドラにより、独自のダイアログを表示するごく簡単なサンプルを示します。

VB.NET
コードを隠すコードを選択
'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
C#
コードを隠すコードを選択
//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にすることにより、ユーザーがセルに正しくない値を入力したとしてもエラーが発生せず、セルの値を元に戻すことができるようになります。

VB.NET
コードを隠すコードを選択
'DataErrorイベントハンドラ
Private Sub DataGridView1_DataError(ByVal sender As Object, _
        ByVal e As DataGridViewDataErrorEventArgs) _
        Handles DataGridView1.DataError
    e.Cancel = False
End Sub
C#
コードを隠すコードを選択
//DataErrorイベントハンドラ
private void DataGridView1_DataError(object sender,
    DataGridViewDataErrorEventArgs e)
{
    e.Cancel = false;
}

DataErrorイベントハンドラでDataGridView.CancelEditメソッドを呼び出してセルの値を元に戻すこともできます。DataGridViewDataErrorEventArgsオブジェクトのCancelプロパティをFalseにした時は、編集モードが終了しますが、CancelEditメソッドを呼び出した時は、編集モードが終了しません。

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

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

この記事への評価

この記事へのコメント

この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。