データベーステーブルにバインドされたDataGridViewを表示するWinformsアプリに取り組んでいます。
そこに新しいエントリを挿入することができ、いくつかのデータ検証を行います。
必要な列が空白のままになっている場合、または一意の制約の1つに違反している場合、DataErrorイベントは次の関数を呼び出します。
protected void _data_error(object sender, DataGridViewDataErrorEventArgs e)
{
MessageBox.Show(this,e.Exception.Message,"Error");
e.ThrowException = false;
e.Cancel = false;
}
ポップアップを閉じると、編集されていた新しい行が削除されます。
すでに保存されている行に対してこれを行うと(更新操作)、行は変更を失い、フォーカスを失います。これは、行を編集可能に保つようにアプリケーションに通知する必要があることを意味すると思いますが、その方法がわかりません。
逆説的ですが、イベントハンドラーを例外に置き換えるとthrow(e.Exception)
、例外が風に投げられ、キャッチされていない例外ハンドラーによって取得されますが、そのウィンドウが閉じた後も新しい行は保持されます。
DataErrorイベントで新しい行を保持するにはどうすればよいですか?
編集:
私の次の考えは、メッセージボックスがポップアップした後、行を保存してDataGridViewのデータソースに追加することでした。データソースにデータを追加すると、データが無効なために例外をスローするコミットされた行として追加されるのに対し、検証が行われないようにデータを編集可能な行として保持するため、これは機能しません。