2017-01-12 19 views
1

を発射から[キャンセル]ボタンを防止しますキャンセルボタン。キャンセルボタンがクリックされた場合、私はDGVに対する保留中の編集を取り消し、その基礎となるDataTableへのすべての変更を拒否したいと思います。残念ながら、ユーザが無効なデータを入力したか、何らかの方法で行が検証されません。キャンセルは、すべてのフォームデータが有効である場合にのみ機能します。明らかに問題があります。セルの検証は、次のように私は、私は反対ヌル検証をやってるカップルの列でDataGridViewのを持っている

私はキャンセルボタンのコードにジャンプし、検証をバイパスしようとします。私はEndEditCancelEditCausesValidationなどで遊んでいないし、すばやいトレースの後に私はなぜそれが働いていないのかを見る - 検証ハンドラが私のコードに到達できなくなっている。

私の問題は、ボタンのクリックハンドラが起動する前にRowValidatingイベントが発生しているようで、e.Cancel = trueは両方のハンドラの実行を終了するようです。いずれにしても、キャンセルをクリックするとdgv.RowValidatingが発生し、button.Clickにはまったく到達しません。また、送信者/ EventArgsから私のボタンがトリガーされた検証を識別するための方法は見当たらないので、どのように区別するかわからない...

私はボタンのコードを発射するまたはb)ボタンのクリックによってバリデーションがトリガされ、バイパスすることを確認しますか?

他にも何か間違っているのですか?あなたの

答えて

1

設定CausesValidationプロパティがfalseButtonをキャンセルしてからキャンセルボタンのClickイベントハンドラであなたのDataGridViewCancelEditメソッドを呼び出します。

private void button1_Click(object sender, EventArgs e) 
{ 
    this.dataGridView1.CancelEdit(); 
} 

があなたのボタンのCausesValidationの設定、検証イベント時にあなたを上げることを防止しますあなたのボタンをクリックしてください。次にDataGridViewCancelEditを呼び出すと、現在の編集セルの保留中の変更を取り消すことができます。

フォームのAutoValidateプロパティをEnableAllowFocusChangeに設定すると、無効な編集コントロールからフォーカスを変更することができます(キャンセルボタンをクリックします)。

+1

また、フォームの 'AutoValidate'プロパティを' EnableAllowFocusChange'に設定すると、無効な編集コントロールからフォーカスを変更することができます(キャンセルボタンをクリックします)。 –

+0

'AutoValidate'は私が欠けていたビットでした。私はすでにあなたの答えに記載されたものを試してみたが、私はこの1つの重要な設定が欠けていた。その情報を回答自体に編集したい場合は、すぐにそれを受け入れます。 –

+1

実際、 'AutoValidate'を' EnableAllowFocusChange'に設定することも別の選択肢です。しかし、私はそれも答えに加えます。 –

関連する問題