2012-01-23 65 views
0

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

如何使窗体调用更新仅当控件的值不同于正在加载到他们时,我单击网格。

更新: 应用程序未使用任何模式,如MVVM。除了用户界面之外,所遵循的结构对于赢取表单来说非常不利。用于数据库交互ADO.net。它已经建立,当我加入这个项目&即使我是新来的wpf。

任何人都可以帮我吗?

+0

您使用的是MVVM这样的模式吗?请解释你的应用程序的设计。 –

+0

你有GridView绑定的ItemsSource吗? –

+0

我有数据网格的项目源。但我不更新网格中的条目。我加载DEM来分离像文本框,组合框等控制 –

回答

0

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

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

+0

您的解决方案将工作,但仍然“闻起来”一点。我认为最好跟踪业务实体本身的变化,而不是在表单上保留一个私有布尔值来检查更新。 –

2

我认为你需要对网格中显示的实体进行一些更改跟踪。无论何时执行更新,您都会检查实体的状态,并只更新需要的实体。基本上你需要在Property Setters的层面进行拦截,以跟踪实体的变化。想想:

  1. 使用具有某些功能的基类来跟踪实体的状态。非常简单:一个布尔hasChanged或更复杂的一个Enum与新增,修改和删除或其他东西。
  2. 派生的其他实体从这个基类
  3. 工作与公共属性和私人支持字段拦截属性修改
  4. 当属性的修改都在基类
  5. 当执行存储的信息在布尔或枚举更新由用户循环通过网格中呈现的实体启动,并选择那些有变化并发送到数据库的实体。

这个有些有益的理论可能是:

Change tracking on businees objects

Using Properties C# programming guide

ADO.NET Self Tracking Entities

我不从你的问题知道的耦合是用户界面之间的紧密和数据库(ADO.NET DataTables左右......)。上面提出的想法需要一些“解耦”的东西。但是,对于您的应用程序中的其他功能来说,它是一个很好的基础,并且可以为您提供一些便利的工作,清晰的框架,改进的维护并可能提高性能

相关问题