两个数据表添加



我有两个数据表。

第一张表----->DataTable _dtMain = new COrder().GetDetails();
第2张表----->DataTable _dtSub = new CGrid().GetSubDetails();

我想加上上面两张表。我正在使用_dtMain.Merge(_dtSub );但它会将_dtSub表附加到_dtMain表中。我希望datatable按列将第二个表添加到第一个表中(这意味着在第一个表之后最后一列)

不要认为有任何内置方法可以实现您想要实现的目标。

我认为你需要自己实现这些东西,比如一个扩展方法

public static DataTable Aggregate(this DataTable dt1, DataTable dt2)
{
    var aggregator = new DataTable(); 
    //add columns from dt1 and dt2 
    //add rows from dt1 dt2
} 

或者,您可以对这两个表执行完整的Outer Join,如本文所述。

经过大量研究,我找到了之前发布的问题的答案。这是用于梳理2个数据表&里面的数据。

   public DataTable CombineTable(DataTable _dtGridDetails, DataTable _dtSubGridDetails)
   {
       //first create the datatable columns 
       DataSet mydataSet = new DataSet();
       mydataSet.Tables.Add("  ");
       DataTable myDataTable = mydataSet.Tables[0];
       //add left table columns 
       DataColumn[] dcLeftTableColumns = new DataColumn[_dtGridDetails.Columns.Count];
       _dtGridDetails.Columns.CopyTo(dcLeftTableColumns, 0);
       foreach (DataColumn LeftTableColumn in dcLeftTableColumns)
       {
           if (!myDataTable.Columns.Contains(LeftTableColumn.ToString()))
               myDataTable.Columns.Add(LeftTableColumn.ToString());
       }
       //now add right table columns 
       DataColumn[] dcRightTableColumns = new DataColumn[_dtSubGridDetails.Columns.Count];
       _dtSubGridDetails.Columns.CopyTo(dcRightTableColumns, 0);
       foreach (DataColumn RightTableColumn in dcRightTableColumns)
       {
           if (!myDataTable.Columns.Contains(RightTableColumn.ToString()))
           {
              // if (RightTableColumn.ToString() != RightPrimaryColumn)
                   myDataTable.Columns.Add(RightTableColumn.ToString());
           }
       }
       //add left-table data to mytable 
       foreach (DataRow LeftTableDataRows in _dtGridDetails.Rows)
       {
           myDataTable.ImportRow(LeftTableDataRows);               
       }
       for (int nIndex = 0; nIndex <= myDataTable.Rows.Count-1; nIndex++)
       {
           if (nIndex == _dtSubGridDetails.Rows.Count)
               break;
           myDataTable.Rows[nIndex][columnindex] = _dtSubGridDetails.Rows[nIndex][columnindex];           
       } 
       return myDataTable;
   }

最新更新