2012-02-02 43 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(); 
} 
相关问题