当绑定控件更改值时更新数据集
本文关键字:更新 数据集 绑定 控件 | 更新日期: 2023-09-27 18:07:31
我将控件绑定到这样的数据集:
txt.DataBindings.Add("Text", ds, true, DataSourceUpdateMode.OnPropertyChanged);
然后我添加了监听器,像这样的更改
private void attatchChangeListeners(DataSet ds)
{
foreach (DataTable dt in ds.Tables)
{
dt.RowChanged += new DataRowChangeEventHandler(dt_RowChanged);
dt.RowDeleted += new DataRowChangeEventHandler(dt_RowDeleted);
dt.TableNewRow += new DataTableNewRowEventHandler(dt_TableNewRow);
}
}
void dt_TableNewRow(object sender, DataTableNewRowEventArgs e)
{
if (!View.Dirty)
{
View.Dirty = true;
}
}
void dt_RowDeleted(object sender, DataRowChangeEventArgs e)
{
if (!View.Dirty)
{
View.Dirty = true;
}
}
void dt_RowChanged(object sender, DataRowChangeEventArgs e)
{
if (!View.Dirty)
{
View.Dirty = true;
}
}
但是当我改变文本框的值时,我没有得到事件。
为了触发事件,我必须对所有行调用endEdit。
我误解了数据绑定还是我做错了什么?
是的"误解":-)。
数据绑定可以被认为是UI对象和数据源(通常是DataSet中的DataTable)之间的中间层。要使UI的更改在底层数据源中生效,必须调用BindingSource的EndEdit。同样,如果你决定不这样做,你总是可以使用"CancelEdit"来取消更改(也就是说,如果你想要还原UI所做的更改以恢复数据源的值)。您可能想要连接BindingSource的CurrentItemChanged事件来满足您的需求。