を発射から[キャンセル]ボタンを防止しますキャンセルボタン。キャンセルボタンがクリックされた場合、私はDGVに対する保留中の編集を取り消し、その基礎となるDataTableへのすべての変更を拒否したいと思います。残念ながら、ユーザが無効なデータを入力したか、何らかの方法で行が検証されません。キャンセルは、すべてのフォームデータが有効である場合にのみ機能します。明らかに問題があります。セルの検証は、次のように私は、私は反対ヌル検証をやってるカップルの列でDataGridViewのを持っている
私はキャンセルボタンのコードにジャンプし、検証をバイパスしようとします。私はEndEdit
、CancelEdit
、CausesValidation
などで遊んでいないし、すばやいトレースの後に私はなぜそれが働いていないのかを見る - 検証ハンドラが私のコードに到達できなくなっている。
私の問題は、ボタンのクリックハンドラが起動する前にRowValidatingイベントが発生しているようで、e.Cancel = true
は両方のハンドラの実行を終了するようです。いずれにしても、キャンセルをクリックするとdgv.RowValidating
が発生し、button.Click
にはまったく到達しません。また、送信者/ EventArgsから私のボタンがトリガーされた検証を識別するための方法は見当たらないので、どのように区別するかわからない...
私はボタンのコードを発射するまたはb)ボタンのクリックによってバリデーションがトリガされ、バイパスすることを確認しますか?
他にも何か間違っているのですか?あなたの
また、フォームの 'AutoValidate'プロパティを' EnableAllowFocusChange'に設定すると、無効な編集コントロールからフォーカスを変更することができます(キャンセルボタンをクリックします)。 –
'AutoValidate'は私が欠けていたビットでした。私はすでにあなたの答えに記載されたものを試してみたが、私はこの1つの重要な設定が欠けていた。その情報を回答自体に編集したい場合は、すぐにそれを受け入れます。 –
実際、 'AutoValidate'を' EnableAllowFocusChange'に設定することも別の選択肢です。しかし、私はそれも答えに加えます。 –