bindingSource クラスを使用せず、Windows フォーム アプリケーションにバインド機能を実装することにしました。私はいくつかの点に成功していますが、複雑さはほとんどありません。理由を知りたいです。データソースと 3 つのコントロール (textbox1、textbox2、checkedBox1) から DataTable を埋めました。コントロールをバインドし、値を表示することができました。
txtBox1.DataBindings.Add("Text", myTable, "NAME", true, DataSourceUpdateMode.Never);
ご想像のとおり、 myTable は、データベース テーブルから入力されたデータを含むデータ テーブルです。次のように、現在の行の値を CurrencyManager で取得できます。
DataRow dr = ((DataRowView)this.BindingContext[myTable].Current).Row;
しかし、現在の行を使用して値を変更したい場合、最初のフィールドが設定された後、他のフィールドは自動的に以前の値に変更されます。つまり:
dr["NAME"]= textBox1.Text;
dr["SURNAME"] = textBox2.Text; //this set seems useless
最初の割り当ては機能しますが、編集が始まる前に textBox2、checkBox1 が値を元に戻すフォーム コントロールです。したがって、この方法で行全体を更新することはできません。
一方、BindingSource を使用すると、現在の行と同様のスタイルが得られます。
DataRow drB = ((DataRowView)bindingSource1.Current).Row;
そして、この行のフィールドを次のように変更します。
drB["NAME"] = textBox1.Text;
drB["SURNAME"] = textBox2.Text;
drB["ACTIVE"] = checkBox1.Checked;
編集を次のように終了します。
bindingSource1.EndEdit();
行全体が正常に変更されたため、すべてのテーブルを更新する準備ができています。違いを見て、bindingSourceを使わずに管理したいと思います。EndEdit() が行うものを使用する必要があるということですか? 私は何を見逃していますか、それとも強迫観念を忘れていますか?