当TextBox值被更改时立即更新DataGridView数据源
我有一个绑定到业务对象列表(每个对象只有一个可编辑字段)的简单DataGridView。我需要用户对该值进行的任何更改(在DataGridViewTextBoxColumn中)以更新绑定对象。也就是说,以与绑定普通文本框并使用“OnPropertyChanged”选项时可用的相同方式为每个按键进行更新。当TextBox值被更改时立即更新DataGridView数据源
原因是我只需要在绑定对象的“IsDirty”属性为true时启用表单上的“确定”按钮。
对于复选框列和使用CurrentCellDirtyStateChanged事件并调用CommitEdit,似乎有很多关于各种网站的讨论。我已经尝试过这种方法,但是这样做有第一个按键清除所有文本单元格的不幸副作用!
任何帮助非常感谢,谢谢。
这听起来像你想要的是,只要用户开始在任何单元格中键入,启用按钮?点击按钮之前,DataSource
实际上是否需要更新?
如果不是那么CurrentCellDirtyStateChanged
应该正常工作 - 只是不要调用CommitEdit
方法,而是将您的按钮设置为在那里启用。
当单元格失去焦点时,更改将应用于DataSource
- 因此,单击按钮时,您将能够处理正确的数据。
我想我可能已经找到了解决办法 - 不是100%肯定,因为我没有你要连接的IsDirty变化,看到这一切工作的MVC控制器 - 我把一个破发点中一个属性设置器在我的DataSource对象上,它会被下面的代码触发,而不是没有它,所以我认为这是有效的。
它只是为DataErrorContext参数使用CurrentCellDirtyStateChanged和CurrentCellChange枚举。
void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.CurrentCellChange);
}
这是我想要的效果是的,但我有一个模型 - 视图 - 控制器(MVC)体系结构,因此必须在对象中完成工作。该按钮在对象脏的情况下启用,而不是直接由表单上的代码启用。 – Darren
我发现,当试图获得一个MV *架构(我使用MVP的winforms)数据绑定阻碍。 –
@Darren - 也是对架构的一种思考,除非你要求一个非常严格的被动视图,你不能从CurrentCellDirtyStateChanged事件发送一条消息到你的控制器,然后将必要的改变为视图 - 数据绑定不会'不一定需要进入它。 –
您确实需要更新数据源吗?难道你不是简单地使用CurrentCellDirtyStateChanged事件并启用按钮?当按钮被点击时,焦点丢失时数据源应该更新。 –