|
.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」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



