如何判断用户是否使用bindingsource修改了数据?

Jon*_*Jon 8 c# data-binding subsonic ado.net winforms

我有一个绑定到绑定的绑定源的DataGridView List<T>.用户单击转到带有文本框等的表单的行.文本框是数据绑定的,如下所示:

if (txtID.DataBindings.Count == 0)
    txtID.DataBindings.Add("Text", bindingSource, "Title");
Run Code Online (Sandbox Code Playgroud)

我希望能够在用户点击关闭按钮时检测用户是否修改了控件中的任何数据,因此我可以提示他们说"你有未保存的工作.你要保存吗?"

如何在绑定源上检测到这一点?

更新:我已经解决了我可以做的事情bindingSource.EndEdit(),它将更改推送到列表中的项目.在我的项目中,我可以说,如果Dirty抛出一个Messagebox但是如果他们点击"No"来保存信息,则CancelEdit不起作用.

Oli*_*ver 7

如果List中的对象支持该INotifyPropertyChanged事件并且您替换了List<T>by a BindingList<T>,则可以订阅ListChangedBindingList 的事件以获知用户所做的任何更改.


Jon*_*Jon 0

从我更新的问题中,我发现我必须使用 Memberwise.Clone 在 BeginEdit 中存储对象的当前版本,然后在 CancelEdit 中将其恢复到当前版本。

  • “在 BeginEdit 时”到底是什么意思?“BindingSource”没有任何“BeginEdit”和“EndEdit”事件,是吗?我也试图在正确的时间获取我的对象的副本,但我很挣扎。:( (6认同)