2012-02-02 98 views
0

我有兩個數據表中,首先包含如何根據條件合併兩個包含不同列的數據表?

DataTable dtMaterialStatement = new DataTable(); 
        dtMaterialStatement.Columns.Add(new DataColumn("MaterialNo", Type.GetType("System.String"))); 
        dtMaterialStatement.Columns.Add(new DataColumn("MaterialId", Type.GetType("System.String"))); 
        dtMaterialStatement.Columns.Add(new DataColumn("Qty", Type.GetType("System.Double"))); 
        dtMaterialStatement.Columns.Add(new DataColumn("Unit", Type.GetType("System.String"))); 
        dtMaterialStatement.Columns.Add(new DataColumn("SinglePrice", Type.GetType("System.Decimal"))); 
        dtMaterialStatement.Columns.Add(new DataColumn("PricePerPack", Type.GetType("System.Decimal"))); 
        dtMaterialStatement.Columns.Add(new DataColumn("UnitsPerPack", Type.GetType("System.String"))); 
        dtMaterialStatement.Columns.Add(new DataColumn("Discount1", Type.GetType("System.Decimal"))); 
        dtMaterialStatement.Columns.Add(new DataColumn("Discount2", Type.GetType("System.Decimal"))); 
        dtMaterialStatement.Columns.Add(new DataColumn("Discount3", Type.GetType("System.Decimal"))); 
        dtMaterialStatement.Columns.Add(new DataColumn("SalesPrice", Type.GetType("System.Decimal"))); 
        dtMaterialStatement.Columns.Add(new DataColumn("Exist", Type.GetType("System.Boolean"))); 

二包含: -

"MaterialNo" 
    Qty 
"Unit" 
"SinglePrice" 
"PricePerPack" 
"UnitsPerPack" 
"Discount1" 
    "Discount2" 
"Discount3" 
"SalesPrice" 

,並配備額外的列,

我想合併這兩個表中,如果第一TABEL的MaterialNo是相同的用第二個表的MaterialNo列,然後從第二個表中取出公共列字段值來更新第一個值對應列的值。 else在第一個表中插入一個新行,使用表的第一列,但是從第二個表中取值。

回答

0
  1. 使用此一個以提取新的數據表僅包含差異http://kodesharp.blogspot.com/2007/12/c-compare-2-datatables-and-return-3rd.html

  2. 然後使用foreachfor循環到differenes手動提取成陣列。然後把它repumped到數據表

事情是這樣的:

DataTable dt = CompareDataTables(dt1, dt2); 

ArrayList Errors = new ArrayList(); 

for (int i = 0; i < d.Columns.Count; i++) 
{ 
    for (int j = 0; j < d.Rows.Count; j++) 
    { 
     if (dt1.Rows[j][i].ToString() != dt2.Rows[j][i].ToString()) 
      { 
       Errors.Add(j); 
       Errors.Add(i); 
       Errors.Add(dt1.Rows[j][i].ToString()); 
       Errors.Add(dt2.Rows[j][i].ToString()); 
      } 
    } 
} 

DataTable dtFinal = dt; 

for (int i = 0; i < Errors.Count; i += 4) 
{ 
    int ak = Int32.Parse(Errors[i].ToString()); 
    int bk = Int32.Parse(Errors[i + 1].ToString()); 
    dtFinal.Rows[ak][bk] = Errors[i + 2].ToString() + "/" + Errors[i + 3].ToString(); 
} 
相關問題