.NET TIPS DataGridコントロールで変更されたセルを検証するには?デジタルアドバンテージ2003/12/19 |
|
|
WindowsフォームのDataGridコントロールでセルのデータ内容が変更されると、変更されたデータを検証して、範囲外の入力の場合にはエラーを表示したいときがある。そのようなときには、グリッドにデータ連結しているDataTableクラス(System.Data名前空間)のオブジェクトのColumnChangingイベントをハンドルして、データの検証処理を行うとよい。ColumnChangingイベントはセルの変更しようとしているタイミングで通知されるイベントだ。
まず、ColumnChangingイベントのハンドラを作成する。そのコードを以下に示す。
|
|
セルの変更を通知するColumnChangingイベントのハンドラの追加 |
次に、そのハンドラのパラメータとして渡されるDataColumnChangeEventArgsクラスのオブジェクトを使って、セルに入力されたデータを取得し、そのハンドラ内でデータ検証を行う。データが範囲外の入力値の場合は、ここで適切なエラー処理を行えばよい。今回の例では、データが範囲外の場合、DataGridコントロールの機能の1つである「列のエラーの説明(ColumnError)」を設定して、例外をスローする。具体的なコードを次に示す。
|
|
ColumnChangingイベント・ハンドラでの入力データの検証(C#) | |
上記のコードでは、「e.Row[e.Column]」で変更のあったセルの変更前データを取得して、「e.ProposedValue」で変更後のデータを取得している。なお、「e.Row」はデータ行を意味するDataRowクラス(System.Data名前空間)のオブジェクトで、「e.Column」はデータ列を意味するDataColumnクラス(System.Data名前空間)のオブジェクトである。
データが範囲外の場合のエラー処理では、「e.Row.RowError」メソッドで「行ヘッダー(行全体)」に対して簡単なエラーの説明を設定し、「e.Row.SetColumnError」メソッドで「セル(行内の1つの列)」に対して詳細なエラーの説明を設定している。これらのメソッドはいずれもDataRowクラスのメソッドだ。また、その後の「throw new Exception(……)」のコードで例外をスローして、データが変更されるのを中止している。これにより、セルのデータは変更前のデータに自動的に戻る。
上記のサンプル・プログラムを実行して、範囲外のデータを入力すると、次の画面のようになる。
セル変更時にデータ検証するプログラムの実行例 | |||||||||
上記のサンプル・コードを実行してプログラムを起動し、範囲外のデータを入力してエラーを発生させた後の画面。 | |||||||||
|
表示したエラー・マークを取り消すには、DataRowクラスのClearErrorsメソッドを呼び出す。
カテゴリ:Windowsフォーム 処理対象:DataGridコントロール 使用ライブラリ:DataGridコントロール 使用ライブラリ:DataTableクラス(System.Data名前空間) 使用ライブラリ:DataRowクラス(System.Data名前空間) 使用ライブラリ:DataColumnクラス(System.Data名前空間) |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|