1

I have two data tables, dt1 & dt2. dt1 has data while dt2 is a new table. Now I want to copy some rows, satisfying particular condition, to dt2. I have tried following code, but I get this exception:

System.ArgumentException This row already belongs to another table.

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

How can I resolve this?

4

3 回答 3

5

change dt2.Rows.Add(dr); to dt2.Rows.Add(dr.ItemArray);

于 2012-09-01T05:21:03.463 回答
0

您不能直接"Add"将 DataTable 行从一个到另一个,因为它属于源 Datatable。您可以"Add"将新创建​​的行添加到 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);
   }
}
于 2012-09-01T05:31:12.037 回答
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 );
  }
 }
于 2012-09-01T06:02:50.570 回答