2つのDataTable間でのDataRowの移動(C#)
sheile
sheile
ATOMRSS
  • コード求むID: 95
  • 登録日時:  2007/08/10 18:38
  • 最終更新日時: 2007/08/30 13:11
  • アクセス数: 4188
  • タグ:  c#
  • codeなにがしブックマークに追加する 0 users
  • このページを del.icio.us に追加
  • このページをはてなブックマークに追加

DataTable1からDataTable2へDataRowを移動する必要があるのですが、
移動先のテーブルにAddする際、「この行は既に別のテーブルに属しています」という
例外が発生してしまいます。

移動元のテーブルからは既に除去しており、ウォッチリストで見ても
dt1は空になっているようです。

解決方法をご存知の方がおりましたら、回答のほどよろしくお願いします。

再現可能と思われるコードは以下のようになります。
private void button1_Click(object sender, EventArgs e)
{
    DataTable dt1 new DataTable();
    dt1.Columns.Add("hoge", typeof(String));

    DataTable dt2 new DataTable();
    dt2.Columns.Add("hoge", typeof(String));

    DataRow row dt1.NewRow();
    row["hoge"] "piyo";
    dt1.Rows.Add(row);

    DataRow deleteRow dt1.Rows[0];
    dt1.Rows.Remove(deleteRow);
    dt2.Rows.Add(deleteRow);
}

コメント

  • ゲスト
  • 1:ゲスト (AnthonyAS)
  • 2007/08/11 00:31

ImportRow使えばできると思います。
dt2.ImportRow(deleteRow);

  • GoodJob
  • 0

回答ありがとうございます。
ImportRowで処理自体は出来たのですが、ImportRowの場合、
新しくDataRowインスタンスを生成してしまうのがネックになっています。

行・列ともに数が多い為、速度面を鑑みて同一インスタンスを
移動させたいと思っています。

どなたかわかるかたはおりませんでしょうか?

  • GoodJob
  • 0

  • PANTO
  • 3:PANTO
  • 2007/08/13 18:14

答えじゃなくてすいません。

何とかできないか試してみたのですが、
既存の仕組みではできないようです。

速度が気になるということでしたら、
1段階外側のループで、
よい方法がないかを検討するというのも手ではないでしょうか。

  • GoodJob
  • 0

  • ゲスト
  • 4:ゲスト
  • 2007/08/14 13:08

.NETを使っていて、処理速度が云々いうのであれば、
端から.NETを使わなければよいのではないでしょうか。

GJ

  • ゲスト
  • 5:ゲスト
  • 2007/08/14 17:44

.NETを使っているからと言って、遅いままで我慢する理由はないと思いますけど。そのためのコストとのトレードオフですが、遅いよりは早い方が良いんじゃないでしょうか。

とはいえ、.NETはもう少し速くなってほしいですね。

GJ

PANTOさん回答ありがとうございます。

今回作成しているシステムはWebシステム(ASP.NET)であり、
他の場所ではそこまで重い処理は無い予定です。

この処理が必要な場所はデータ件数・カラム数共に
多いことが予想される為、少しでも高速化を図りたいと思い、
質問させて頂きました。

  • GoodJob
  • 0

前へ 1 次へ

コメントする

[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。

[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。

ゲスト投稿者:ゲスト:

関連ソースコード・ノウハウを登録

PDFLib | A library for processing PDF on the fly プレゼン公開・共有サイト handsOut.jp オープンタイプ株式会社 チーム・マイナス6% - みんなで止めよう温暖化

ブックマークコメント