如何在不更改表单条目时避免更新

时间:2012-01-23 07:29:03

标签: c# wpf winforms

目前在我的应用程序中,在点击网格行时,我用网格行条目填充页面的控件。我有一个UPDATE按钮来保存更改。但即使不修改任何控件值并单击“更新”按钮,也将使用相同的值完成更新。触发日志表条目。

如果控件的值与单击网格时加载到控件的值不同,我怎样才能使表单调用更新。

更新: 应用程序不使用任何模式,如MVVM。除了用户界面之外,获得表格的结构非常简洁。对于db交互ADO.net。它是在我加入这个项目时建成的。即使我是wpf的新手。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

我认为您需要对网格中显示的实体进行一些更改跟踪。每当执行更新时,您都会检查实体的状态,并仅更新需要它们的实体。基本上,您需要在Property Setters级别进行拦截,以跟踪实体中的更改。想一想:

  1. 使用具有某些功能的基类来跟踪实体的状态。非常简单:布尔值hasChanged或更“复杂”的Enum with Added,Modified和Deleted等等。
  2. 从此基类派生其他实体
  3. 使用公共属性和私有支持字段来拦截属性修改
  4. 执行属性修改时,将信息存储在基类
  5. 中的布尔值或枚举中
  6. 当用户循环通过网格中显示的实体启动更新时,选择那些有更改并将其发送到数据库的更新。
  7. 关于这一点的一些有用的理论可能是:

    Change tracking on businees objects

    Using Properties C# programming guide

    ADO.NET Self Tracking Entities

    我不知道你的问题在用户界面和数据库之间的耦合是多么紧密(ADO.NET DataTables左右......)。上面提出的想法需要一些“脱钩”的东西。但是,它是您应用程序中进一步功能的良好基础,可以为您提供一些简单的工作,清晰的框架,改进的维护并可能提高性能。

答案 1 :(得分:0)

我认为最简单的方法是为控件添加一个处理程序,用于获取用户输入,这将设置一些布尔属性,例如。 RowWasEdited,为true。然后在UPDATE按钮单击事件上检查此属性,执行必要的操作,并将其设置为false。

但我确信有比这更优雅的东西。