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

时间:2011-09-01 21:21:34

标签: c# winforms data-binding

我将我的控件绑定到这样的数据集:

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来触发事件。

我误解了数据绑定还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

是“被误解”: - )。

数据绑定可以被认为是UI对象和DataSouce之间的中间层(通常是DataSet中的DataTable)。要从UI中获取更改在基础DataSource中生效,您必须调用BindingSource的EndEdit。同样,如果您决定不这样做,则可以始终使用“CancelEdit”取消更改(即,如果您要还原UI所做的更改以获取DataSource的值)。您可能希望连接BindingSource的CurrentItemChanged Event以满足您的要求。

相关问题