【问题标题】:two datatable adding两个数据表添加
【发布时间】:2012-02-10 11:40:25
【问题描述】:

我有两个数据表。

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

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

【问题讨论】:

    标签: c# windows


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-12-26
        • 2011-08-26
        • 1970-01-01
        • 2016-08-07
        • 1970-01-01
        • 2018-01-29
        • 1970-01-01
        • 2017-09-13
        • 1970-01-01
        相关资源
        最近更新 更多