[[http://msdn.microsoft.com/de-de/library/15a31akc.aspx]]からのウォークスルーを使用して、VB 10 Expressで仮想モードのDatagridView
を実装しました。私たちはWinForms )。仮想バインドされていないDataGridViewの編集コントロールイベントハンドラ内から現在の行のコミットを強制するにはどうすればよいですか?
CommitEdit (DataGridViewDataErrorContexts.Commit)
は、現在のセルの内容をデータキャッシュにコミットすることを理解しています。
この例では、行レベルのコミットを使用しています。つまり、現在の行が残されるまで値を行バッファにプッシュします。その後、データストアに行が追加(または更新)されます。それはまさに私がやっていることです。
質問 - 現在の行をプログラムから除外せずにコミットするにはどうすればよいですか?(私は行全体をコミットしたいだけではなく、現在のセル。)
ユーザーが行を離れた場合は、データストアの更新が世話をされRowValidating
、RowValidated
、RowEnter
イベントシーケンスがあります。だから1つのアイデア(現在私の唯一のアイデア)は、たとえばCurrentCell
をNothing
に設定するだけです。
しかし、私はちょうど私がカスタム列によって作成されたカスタムエディットコントロールのイベントハンドラ内からコミットしたいので、Nothing
(または現在の行の外側の任意のセル)にDataGridView
のCurrentCell
プロパティを設定し、IすることはできませんそこにCurrentCell
を設定する場合は、System.InvalidOperationException
の例外を参照してください。
実際、それはコンボボックスの右にある小さなボタンです。すなわち、子孫の編集コントロールDataGridViewComboBoxColumn
の子孫DataGridViewComboBoxCell
を作成します。私の特別なComboBoxセルは、現在の行をコミットするはずの小さなボタンを追加します。残念ながら、そのボタンの_Click
イベントハンドラは、DetachEditingControl
が例外をスローするため、CurrentCell
を変更することはできません。
明らかに、_Click
イベント全体が処理されるまで、CurrentCell
再割り当てを延期する必要があります。または何?どうすればいいですか?このメッセージが受信されたときに、というカスタムWindowsメッセージを登録して、フォームのウィンドウプロシージャをオーバーライドするように設定し直します(CurrentCell
)。 (こんにちは)
DataGridView
は、データストアの更新を実行するために処理するイベントを発生させて、すべての変更をコミットすることは簡単です。
私が話していることがややはっきりしていることを願っています。私はまだコンパクトなコード例を持っていない:(ここで
Ah、addendum:DataGridViewにRowCountだけを設定しません(「DataGridViewがバインドされていません。 – TheBlastOne