2012-09-12 85 views
0

我有一個問題,我不知道如何解決。我有一個C#應用程序,它接收來自服務器的數據項目列表,並將它們綁定並顯示在數據網格中。用戶必須能夠修改它們並添加或刪除項目,然後將這些更改提交回服務器。 datagrid基本上起着pgAdmin 3或後臺服務器或其他用戶可編輯數據庫表的「編輯數據」窗口的作用。更新綁定到數據網格的數據

我能夠顯示數據網格中的項目,但不知道如何跟蹤對列表所做的所有更改。在進行更改時,必須知道該項目的未更改版本以及已更改的版本,因爲需要刪除原件並插入修改後的版本。

有誰知道如何做到這一點?

+0

你是如何從數據庫中提取數據的? –

+0

@KDiTraglia有一箇中間服務器應用程序從數據庫獲取數據並將其轉發給C#應用程序。 C#應用程序通過套接字接收數據並將其解析爲數據項列表。該列表然後傳遞給包含數據網格的窗口。該窗口具有一個從此列表構建的ObservableCollection字段,並將其用作datagrid的itemssource – Alex

+0

中間服務器應用程序是將數據寫回數據庫的東西嗎?如果是這樣,它如何與數據庫交互來獲取數據? –

回答

0

您需要有一個視圖模型來跟蹤這些變化。基本上每個項目將有一個當前值,但也是來自數據庫的最新值。

public class ViewModel 
{ 
    //collection of subviewmodel to bind to datagrid 
} 

public class SubViewModel 
{ 
    //Model instance 
    //property to expose db value from model instance 
    //field to store old db value 
} 
public class Model 
{ 
    //db value 
    //db information 
} 
+0

我以前聽說過這個,花了好幾天的時間試着去理解它,但它對我來說沒有任何意義。我想我有模型,這將是數據項,但是我不知道視圖模型會做什麼。將視圖模型綁定到數據網格的itemssource字段,並讓它包含兩個模型,一個用於原始數據,另一個用於修改後的數據? – Alex

+0

視圖模型基本上以從UI角度來看有意義的方式呈現模型信息。視圖模型上的每個對象都可以包裝一個模型對象,或者(如果您對MVVM不太嚴格),它可以只是一個模型對象。在這種情況下,讓視圖模型對象包裝每個模型對象(以便存儲當前值和以前的值)似乎是很好的做法。 – mydogisbox

+0

那麼這將涉及克隆原始項目,並在視圖模型創建時將其存儲在視圖模型中的單獨變量中?那麼我將如何將模型的字段綁定到數據網格?我只是將模型中的所有屬性複製到視圖模型中? – Alex