当绑定控件更改值时更新数据集

本文关键字:更新 数据集 绑定 控件 | 更新日期: 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事件来满足您的需求。