1

dt1とdt2の2つのデータテーブルがあります。dt1にはデータがあり、dt2は新しいテーブルです。次に、特定の条件を満たすいくつかの行をdt2にコピーします。次のコードを試しましたが、次の例外が発生します。

System.ArgumentExceptionこの行はすでに別のテーブルに属しています。

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

どうすればこれを解決できますか?

4

3 に答える 3

5

dt2.Rows.Add(dr);に 変更 dt2.Rows.Add(dr.ItemArray);

于 2012-09-01T05:21:03.463 に答える
0

"Add"DataTable行はソース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);
   }
}
于 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 に答える