2012-01-23 100 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左右......)。上面提出的想法需要一些「解耦」的東西。但是,對於您的應用程序中的其他功能來說,它是一個很好的基礎,並且可以爲您提供一些便利的工作,清晰的框架,改進的維護並可能提高性能

相關問題