我的应用程序充满了各种控件数据绑定到我的类。我想问用户“您正在关闭应用程序并进行了一些更改。您要保存更改吗?”。为此,我需要认识到用户做了任何更改。
如何捕获用户对数据绑定控件的更改? textBoxXXX_TextChanged是唯一的方法吗?
提前感谢您的所有答案。
答案 0 :(得分:2)
这取决于数据源;例如,DataTable和DataSet源包含GetChanges()
方法,可以让您轻松查看是否已添加/删除/修改行。其他数据源将有自己的实现,如果有的话。如果没有实现,那么您可以决定如何检查这些更改。
无论如何,这是您应该在数据级别而不是UI(通过观察“已更改”事件)执行的操作。观看事件不会扩展到几个控件之外,维护也可能是不确定的。
更新:不确定为什么我没有想到它,但第二个选项是向您的UI对象添加BindingSource
并将其用作数据绑定代理(您的UI)控制数据绑定到BindingSource
和BindingSource
绑定到实际数据源)。它提供了一种比处理所有单个“Control_Changed”事件更好的方法,并且需要重新处理其他层(特别是如果它们不是自定义数据类型)。
答案 1 :(得分:1)
您需要为此提供自定义逻辑,实际上没有自动方式。我认为有几种选择:
答案 2 :(得分:0)
如前所述,有很多方法可以实现这一点,具体取决于您希望获得的粒度。
使用客户端javascript的一种相对简单的方法是执行以下操作:
onchange
事件。您可以使用javascript / DOM在页面加载时动态执行此操作。pageHasChanged = true;
beforeonunload
事件(当用户尝试离开页面时发生)并检查pageHasChanged
变量以查看是否进行了任何更改。如果进行了更改,您可以提醒用户。这不会为您提供更改内容的详细信息,但可以很容易地修改以跟踪哪些表单元素发生了更改。