如何捕获数据绑定控件中的用户更改?

时间:2009-12-28 20:12:02

标签: c# data-binding user-input

我的应用程序充满了各种控件数据绑定到我的类。我想问用户“您正在关闭应用程序并进行了一些更改。您要保存更改吗?”。为此,我需要认识到用户做了任何更改。

如何捕获用户对数据绑定控件的更改? textBoxXXX_TextChanged是唯一的方法吗?

提前感谢您的所有答案。

3 个答案:

答案 0 :(得分:2)

这取决于数据源;例如,DataTable和DataSet源包含GetChanges()方法,可以让您轻松查看是否已添加/删除/修改行。其他数据源将有自己的实现,如果有的话。如果没有实现,那么您可以决定如何检查这些更改。

无论如何,这是您应该在数据级别而不是UI(通过观察“已更改”事件)执行的操作。观看事件不会扩展到几个控件之外,维护也可能是不确定的。


更新:不确定为什么我没有想到它,但第二个选项是向您的UI对象添加BindingSource并将其用作数据绑定代理(您的UI)控制数据绑定到BindingSourceBindingSource绑定到实际数据源)。它提供了一种比处理所有单个“Control_Changed”事件更好的方法,并且需要重新处理其他层(特别是如果它们不是自定义数据类型)。

答案 1 :(得分:1)

您需要为此提供自定义逻辑,实际上没有自动方式。我认为有几种选择:

  1. 在编辑开始时,保存原始数据对象的副本,当需要检查时,将当前对象与保存的对象进行比较。比较可以是自定义的(逐个字段)或半自动的,使用序列化(比较序列化的表格) - 如果它是可序列化的。
  2. 在每个数据对象的属性集访问器中,测试值的变化并将对象标记为“脏”。

答案 2 :(得分:0)

如前所述,有很多方法可以实现这一点,具体取决于您希望获得的粒度。

使用客户端javascript的一种相对简单的方法是执行以下操作:

  1. 进入表单元素的onchange事件。您可以使用javascript / DOM在页面加载时动态执行此操作。
  2. 调用onchange错误处理程序时,您可以设置页面级变量:pageHasChanged = true;
  3. 挂钩页面的beforeonunload事件(当用户尝试离开页面时发生)并检查pageHasChanged变量以查看是否进行了任何更改。如果进行了更改,您可以提醒用户。
  4. 这不会为您提供更改内容的详细信息,但可以很容易地修改以跟踪哪些表单元素发生了更改。