內容不寫了,代碼上都做了寫注釋。
1 /**//// <summary>
2 /// 比較兩個數據表,並返回比較結果表
3 /// 比較條件:
4 /// 1.兩個表結構相同;
5 /// 2.兩個表排序都是按主鍵順序排序;
6 /// 3.兩個表都不為空;
7 /// </summary>
8 /// <param name="newTable">新數據</param>
9 /// <param name="oldTable">舊數據</param>
10 /// <param name="parmaryKey">表主鍵名稱</param>
11 /// <param name="colState">狀態列名稱</param>
12 /// <param name="stateValue">不相同時狀態值</param>
13 /// <returns>結果數據表 </returns>
14 public static DataTable CompareData(
15 this DataTable newTable,
16 DataTable oldTable,
17 string parmaryKey,
18 string colState,
19 object stateValue)
20 {
21 int newTableCount = newTable.Rows.Count;
22 int oldTableCount = oldTable.Rows.Count;
23
24 /**/////比較結果表
25 DataTable resultTable = newTable.Clone();
26
27 int i = 0, j = 0;
28 do
29 {
30 DataRow dr1 = null;
31 DataRow dr2 = null;
32
33 /**/////結果行
34 DataRow rDr = resultTable.NewRow();
35
36 /**/////如果超出舊表,則新表所有其他列進行添加
37 if (j < oldTableCount)
38 {
39 dr2 = oldTable.Rows[j];
40 }
41 else
42 {
43 for (int k = i; k < newTableCount; k++)
44 {
45 DataRow rDr2 = resultTable.NewRow();
46 rDr2.ItemArray = newTable.Rows[k].ItemArray;
47 resultTable.Rows.Add(rDr2);
48 }
49 /**/////添加完成後退出
50 break;
51 }
52
53 /**/////如果超出新表,則將舊表剩余數據設置狀態值並添加到結果表中
54 if (i < newTableCount)
55 {
56 dr1 = newTable.Rows[i];
57 }
58 else
59 {
60 for (int k = j; k < oldTableCount; k++)
61 {
62 DataRow rDr2 = resultTable.NewRow();
63 rDr2.ItemArray = oldTable.Rows[k].ItemArray;
64 rDr2[colState] = stateValue;
65 resultTable.Rows.Add(rDr2);
66 }
67 /**/////添加完成後退出
68 &nbs