【问题标题】:Exception in copying DataRow to another DataTable将 DataRow 复制到另一个 DataTable 时出现异常
【发布时间】:2012-08-26 20:21:55
【问题描述】:

我有两个数据表,dt1 和 dt2。 dt1 有数据,而 dt2 是一个新表。现在我想将一些满足特定条件的行复制到 dt2。我尝试了以下代码,但我得到了这个异常:

System.ArgumentException 此行已经属于另一个表。

foreach(DataRow dr in dt1.Rows)
{
   if(Convert.ToInt32(dr["col"]) == value)
   {
      dt2.Rows.Add(dr);
   }
}

我该如何解决这个问题?

【问题讨论】:

    标签: c#


    【解决方案1】:

    每次向数据表添加一行时,它应该是不同的(新)行............

    Datarow newRow = null;
    foreach(DataRow dr in dt1.Rows)
    {
      if(Convert.ToInt32(dr["col"]) == value)
      {
       newRow = dt2.NewRow();
       newRow ["A"] = dr["A"];     
       dt2.Rows.Add(newRow );
      }
     }
    

    【讨论】:

      【解决方案2】:

      你不能直接"Add"一个DataTable行从一个到另一个,因为它属于源Datatable。你可以"Add"一个新创建的行到DataTable。

      因此你得到了这个异常。

      有很多方法可以克服这个问题。下面列出了一些

      方法一:

      如果您想从源 Datatable 中获取一行并添加到目标而不进行任何更改,请使用 ImportRow 这种方式。

      dt2.ImportRow(dr);
      

      方法二:

      但是如果你想获取特定的数据。然后用这个

      foreach(DataRow dr in dt1.Rows)
      {
         if(Convert.ToInt32(dr["col"]) == value)
         {
            Datarow ndr = dt2.NewRow();
            ndr["Foo"] = dr["Foo"];
            //..Similarly for other rows.
            dt2.Rows.Add(ndr);
         }
      }
      

      【讨论】:

        【解决方案3】:

        dt2.Rows.Add(dr); 更改为dt2.Rows.Add(dr.ItemArray);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-05
          • 2020-03-02
          • 2011-06-21
          • 1970-01-01
          • 2012-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多