我将我的控件绑定到这样的数据集:
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来触发事件。
我误解了数据绑定还是我做错了什么?
答案 0 :(得分:1)
是“被误解”: - )。
数据绑定可以被认为是UI对象和DataSouce之间的中间层(通常是DataSet中的DataTable)。要从UI中获取更改在基础DataSource中生效,您必须调用BindingSource的EndEdit。同样,如果您决定不这样做,则可以始终使用“CancelEdit”取消更改(即,如果您要还原UI所做的更改以获取DataSource的值)。您可能希望连接BindingSource的CurrentItemChanged Event以满足您的要求。