【问题标题】:Merge 2 DataTables and store in a new one合并 2 个数据表并存储在一个新的数据表中
【发布时间】:2010-09-22 01:52:05
【问题描述】:

如果我有 2 个 DataTable(dtOne 和 dtTwo)并且我想将它们合并并将它们放入另一个 DataTable(dtAll)中。我怎样才能在 C# 中做到这一点?我在数据表上尝试了 Merge 语句,但这返回无效。合并是否保留数据?例如,如果我这样做:

 dtOne.Merge(dtTwo);

dtOne 是否发生变化或 dtTwo 是否发生变化,如果其中任何一个发生变化,是否保留所做的更改?

我知道我不能这样做,因为 Merge 返回 void,但我希望能够将 dtOne 和 dtTwo 的 Merger 存储在 dtAll 中:

//Will Not work, How do I do this
dtAll = dtOne.Merge(dtTwo);

【问题讨论】:

    标签: c# datatable


    【解决方案1】:

    Merge 方法从第二个表中获取值并将它们与第一个表合并,因此第一个表现在将保存两个表中的值。

    如果要保留两个原始表,可以先复制原始表,然后合并:

    dtAll = dtOne.Copy();
    dtAll.Merge(dtTwo);
    

    【讨论】:

    • @Knickerless-Noggins 的代码:public static DataTable MergeTwoDataTables(DataTable tableA, DataTable tableB) { DataTable MethodResult = null; try { DataTable TableA = tableA.Copy(); TableA.Merge(tableB); MethodResult = TableA; } catch //(Exception ex) { //ex.HandleException(); } return MethodResult; }
    【解决方案2】:
    dtAll = dtOne.Copy();
    dtAll.Merge(dtTwo,true);
    

    参数 TRUE 保留更改。

    更多详情请参考MSDN

    【讨论】:

      【解决方案3】:
      DataTable dtAll = new DataTable();
      DataTable dt= new DataTable();
      foreach (int id in lst)
      {
          dt.Merge(GetDataTableByID(id)); // Get Data Methode return DataTable
      }
      dtAll = dt;
      

      【讨论】:

      【解决方案4】:

      您可以从一个空的DataTable 开始,而不是dtAll = dtOne.Copy(); 中的dtAll = dtOne.Copy();,然后迭代地逐一合并:

      dtAll = new DataTable();
      ...
      dtAll.Merge(dtOne);
      dtAll.Merge(dtTwo);
      dtAll.Merge(dtThree);
      ...
      

      等等。

      此技术在您想要迭代合并数据表的循环中很有用:

      DataTable dtAllCountries = new DataTable();
      
      foreach(String strCountry in listCountries)
      {
          DataTable dtCountry = getData(strCountry); //Some function that returns a data table
          dtAllCountries.Merge(dtCountry);
      }
      

      【讨论】:

        【解决方案5】:

        这就是我为合并两个数据表并将最终结果绑定到网格视图所做的操作

                DataTable dtTemp=new DataTable();
                for (int k = 0; k < GridView2.Rows.Count; k++)
                {
                    string roomno = GridView2.Rows[k].Cells[1].Text;
                    DataTable dtx = GetRoomDetails(chk, roomno, out msg);
                    if (dtx.Rows.Count > 0)
                    {
                        dtTemp.Merge(dtx);
                        dtTemp.AcceptChanges();
        
                    }
                }
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-30
        • 1970-01-01
        • 2015-08-05
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        相关资源
        最近更新 更多