我决定不使用 bindingSource 类,而是在我的 Windows 窗体应用程序上实现绑定功能。我在某些方面取得了成功,但几乎没有发生并发症。我想找出原因。我从数据源和三个控件填充了 DataTable:textbox1、textbox2、checkedBox1。我设法绑定控件并显示值;
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() 所做的事情?我错过了什么,或者忘记了痴迷?