将DataRow复制到另一个DataTable时出现异常

时间:2012-09-01 05:18:50

标签: c#

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

  

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

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

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

你直接不能"Add"一个DataTable行,因为它属于souce Datatable。您可以"Add"将新创建的行添加到DataTable。

因此你得到了这个例外。

有很多方法可以解决这个问题。一些列在下面

方法1:

如果您想从源Datatable获取一行并在没有任何更改的情况下添加目标,请以这种方式使用ImportRow

dt2.ImportRow(dr);

方法2:

但是如果你想获取具体数据。然后使用此

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);
   }
}

答案 2 :(得分:0)

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

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 );
  }
 }