基本的なスタンス
単発(?)の不正な入力は許可しない(エラーメッセージを出して、元の値に戻す。エラーバルーンの出番なし)。型違いのエラーもこれに含まれる。
※ロストフォーカスできないような仕様にはしない(ほっとくとこのようになるが(型違いの場合)) 。e.cancel = falseでOK実現
複合的な条件にひっかかる場合は、エラーバルーンを出す(一意性の制約など?)。
複合的な条件で、いったん入力を許可したいのに(型エラー以外ならいったん許可することができるはず)、勝手にe.cancel=falseのような動作になってしまうときどうするか?(エラーアイコンを出して保留にしたいのだが)
EnforceConstraint=falseで、エラーが出ないようにはできるが、こうすると、全くエラーが出なくなってしまうので、エラーバルーンも出せない(エラーがどこで起きているか、エラーメッセージがなにかが引き出せない)
一つの方法としては、EnforceConstraint=falseのタイミングで、起こるエラーをキャッチし、それに応じてエラーバルーンをだすか。しかし、バルーンはエラーの書き込みが行われたらすぐ出るほうがベターだし、また、これだとバルーンを消すタイミングが分からない。
どうも、 EnforceConstraint=true実行時に、勝手にエラー個所にバルーンが付くようだ(例外をキャッチしないと、そもそもエラーがあった時点でプログラムが落ちてしまうが)
原則として、DataTableがDataGridViewに関連づいているときは、DataGridView経由で変更を行う(Changedイベント発動のため)
エラー処理
バインド元と型が違う値(整数のところに少数や、Doubleのところに非数字文字列)をフォームに入力した場合
イベント発生順序(一般的なコントロールオブジェクト)
| 1 | Leave | 入力のフォーカスがコントロールを離れた場合に発生する。 |
| 2 | Validating | 入力値の検査。 イベントをキャンセルした場合、以降のイベントは発生しない。 |
| 2.5 | Changed | (変更があった場合のみ起こる) |
| 3 | Validated | 入力値の検証終了後に発生する。 |
| 4 | LostFocus |
フォーカスを喪失した場合に発生する。 |
| 5 | DataError | (DataGridViewの場合に発生) |
イベントの違い(一般的なコントロールオブジェクト)
| イベント | 説明 |
|---|---|
| Validating | 入力値の検証を行う。 値が適切でない場合は、フォーカスの移動をキャンセルできる。 |
| Validated | 入力値の検証後に発生する。 値が適切な場合のみ発生するので、入力エラーは考えなくて良い。 |
ref. http://blog.livedoor.jp/akf0/archives/51212276.html
RowErrorプロパティは、自分で書き込みしないとなにも入らないようだ(制約条件違反のときに、自動的にエラーメッセージを入れてくれればいいのに。。)
よって、