【发布时间】:2009-12-28 20:12:02
【问题描述】:
我的应用程序充满了各种控件的数据绑定到我的类。我想问用户“您正在关闭应用程序并进行了一些更改。您要保存更改吗?”。为此,我需要识别用户进行了任何更改。
如何捕捉用户在数据绑定控件中所做的更改? textBoxXXX_TextChanged 是唯一的方法吗?
提前感谢您的所有回答。
【问题讨论】:
标签: c# data-binding user-input
我的应用程序充满了各种控件的数据绑定到我的类。我想问用户“您正在关闭应用程序并进行了一些更改。您要保存更改吗?”。为此,我需要识别用户进行了任何更改。
如何捕捉用户在数据绑定控件中所做的更改? textBoxXXX_TextChanged 是唯一的方法吗?
提前感谢您的所有回答。
【问题讨论】:
标签: c# data-binding user-input
这取决于数据源;例如 DataTable 和 DataSet 源包含GetChanges() 方法,这些方法使您可以轻松查看是否已添加/删除/修改行。其他数据源将有自己的实现(如果有)。如果没有实现,则由您决定如何检查这些更改。
无论如何,这是您应该在数据级别而不是 UI 上执行的操作(通过监视“更改”事件)。观看事件的规模不会超出几个控制范围,而且维护可能很困难。
更新:不知道为什么我没有想到它,但第二个选择是将BindingSource 添加到您的 UI 对象并将其用作数据绑定代理(您的 UI 控制数据绑定BindingSource 和 BindingSource 绑定到真实数据源)。它提供了一种比处理所有单独的“Control_Changed”事件更好的方法,并且需要对其他层进行返工(尤其是如果它们不是自定义数据类型)。
【讨论】:
您需要为此提供自定义逻辑,实际上并没有 自动 方式来执行此操作。在我看来,有几种选择:
【讨论】:
如前所述,有很多方法可以做到这一点,具体取决于您想要获得的粒度。
使用客户端 javascript 的一种相对简单的方法是执行以下操作:
onchange 事件。您可以使用 javascript/DOM 在页面加载时动态执行此操作。pageHasChanged = true;
beforeonunload 事件(当用户试图离开页面时发生)并检查pageHasChanged 变量以查看是否进行了任何更改。如果进行了更改,您可以提醒用户。这不会为您提供更改的详细信息,但很容易修改以跟踪哪些表单元素发生了更改。
【讨论】: