两个数据表添加

时间:2012-02-10 11:40:26

标签: c# windows

我有两个数据表。

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

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

2 个答案:

答案 0 :(得分:0)

不要认为你想要实现的东西有任何内置方法。

我认为您需要为这些内容制作自己的实现,例如扩展方法

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,如this文章中所述。

答案 1 :(得分:0)

经过大量研究后,我找到了我之前发布的问题的答案。这是用于梳理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;
   }