2008年11月17日 星期一

GetChanges() Merge() DIY 版

發想:
由於之前是開發 Delphi 的程式。在 .net 2.0 中的 DataSet 我覺得就有 Delphi 的味道。所以就一直想找個在 Delphi 程式中的功能 DataSet.Delta。這個功能主要是要取出 DataSet 中改變的部份。以減少 size 方便上傳。
而在 .net 中對應的 Function 就是 GetChanges() 及 Merge() 這兩個 function
在實際使用後只想發出 亙亙亙 的聲音~
在目前開發的方式是採 MVC 的架構 Client 新增 Record只有一個Temp PK,需上傳至Server後才可以取得實際的 PK。但 GetChange() 及 Merge() 需要由 PK 才可以找出原先的 Record (為何不用 Record 的 RowCode 咧) 才 Merge 的起來。要不然就再多一筆資料給你看。要不然連 Modified 的 Row 也 Merge 不起來。 看來是 M$ 版本的功能太強大了,我實在不會用
試了老半天,決定開發 DIY 版的 Code。

需求:
ViewModel GetChanges() 回傳改變的 DataSet 集合
void Merge(ViewModel result) 將 result 中的資料寫回


用法:




TestVM actual= (TestVM)target.GetChanges();


//the new row
actual.TypedDataSet.DataTable3.Rows[0][2] = "newRow";
actual.TypedDataSet.DataTable3.Rows[0][1] = 8;
actual.TypedDataSet.DataTable3.Rows[0][0] = "i'm pk"; //this is PK

actual.TypedDataSet.DataTable2.Rows[0][2] = "dt2new";
actual.TypedDataSet.DataTable2.Rows[0][1] = 2;

actual.TypedDataSet.DataTable3.Rows[0][2] = "dt3new";
actual.TypedDataSet.DataTable3.Rows[0][1] = 3;

target.Merge(actual);

沒有留言: