- PR -

DataRowをDataTableに設定

1
投稿者投稿内容
ガテン系
会議室デビュー日: 2003/07/04
投稿数: 9
投稿日時: 2003-07-16 16:20
こんにちは。いつもお世話になっています。
C#で開発をしているものです。

DataRow[]型のDBアクセス関数hoge()で取得したデータを
DataTableに設定しようとしています。

その際に以下のようにループして設定しようとすると
「この行は既に別のテーブルに属しています。」
というエラーが表示されてしまいます。

DataRow[] drGet = hoge();
DataTable dt = new DataTable();
for(int i=0;i<drGet.Length;i++)
{
DataRow dr = dt.NewRow();
dr = drGet[i];
dt.Rows.Add(dr); ←ここでエラーが表示される
}

関数hoge()からの参照渡しのために、テーブルの参照を
引き継いでいるのが原因だと思い
DataRow[] drGet = hoge();

DataRow[] drGet = (DataRow[])hoge().clone();
として値渡しにしてみましたが結果は変わりませんでした。

なぜうまくいかないのかよくわかりません。
どなたか分かる方がいましたらご教授をお願いします。
あすかぜ
常連さん
会議室デビュー日: 2003/04/22
投稿数: 21
投稿日時: 2003-07-17 19:46
dr = drGet[i];
この代入で、dr がdrGet[i] をコピーではなく参照するようになっています。
これを
dr.ItemArray = drGet[i].ItemArray;
などとしてみてはどうでしょう?
なな
ぬし
会議室デビュー日: 2003/06/22
投稿数: 659
お住まい・勤務地: 愛知県
投稿日時: 2003-07-18 08:30
DataRowは、関連するDataTableを保持しているのでは?
(Tableプロパティがありますし)
なので、値か参照かの問題ではなく、列値のみコピーする必要があるのではないでしょうか?

あすかぜさんの方法でどうでしょう?
1

スキルアップ/キャリアアップ(JOB@IT)