- PR -

DataTableへの行追加について

1
投稿者投稿内容
ts12_
会議室デビュー日: 2005/09/05
投稿数: 10
投稿日時: 2007-09-13 01:31
いつも参考にさせて頂いています。

質問させて頂きたいのは、VB.net2005にて1つのDataTableから
条件に合う行のみを抜き出した別のDataTableを作成し、そこへ
元のDataTableで作成した新規行を追加したいのです。

サンプルコード
Dim dt As DataTable
Dim dt2 As DataTable
Dim vw As DataView
Dim row As DataRow

dt = New DataTable
dt.Columns.Add("A", GetType(Integer))

'テスト用データの投入
For i As Integer = 0 To 5
row = dt.NewRow
row("A") = i
dt.Rows.Add(row)
Next

'ViewからDataTableを作成
vw = dt.DefaultView
vw.RowFilter = "A >= 3"
dt2 = vw.ToTable()

'元のDataTableの新規行を作成
row = dt.NewRow
row("A") = 6

'Viewから作成したDataTableに行を追加
dt2.Rows.Add(row)

以上のようなコードで実行すると、dt2.Rows.Add(row)の前後で
エラーは発生しませんがdt2.Rows.Countの値に変化がありません。

何か処理が足りないのでしょうか?
ご存知の方がいらっしゃればご教授頂きたく、よろしくお願いします。
(dt2に行を追加する方法は他にいろいろありましょうが、エラーが
発生しないのに行が追加されない事が不思議なのです。)


さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2007-09-13 08:06
さかもとと申します。

サンプルコードですが、今の状態だとエラーで落ちるはずです。

dt2.Rows.Add(row) の部分で。エラー:「この行は既に別のテーブルに属しています」

もしも、サンプルコードの記載漏れがあれば、ご提示頂ければと思います。


_________________
------------------------------------------
拝啓、さかもとと申します♪
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-09-13 09:26
きつい言い方だけど参照ってのがわかってなさげ。
まずこれを何とかしないと根本的な解決にはならない。
ts12_
会議室デビュー日: 2005/09/05
投稿数: 10
投稿日時: 2007-09-13 10:00
ご指摘ありがとうございます。
Rows.AddはImportRowの間違いです。
申し訳ありません。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2007-09-13 11:59
さかもとです。

コード:

'元のDataTableの新規行を作成

row = dt.NewRow
row("A") = 6
'★このままだとdt.Rows.Count=6件のまま→追加されていないはずです
'★追ってみてください。

'Viewから作成したDataTableに行を追加
'★6件のままで追加されていないのでImportRowしても3件のまま変わらないはず
dt2.ImportRow(row)




エラーが発生しないのは「書かれている通りちゃんと動作している」からだと思います。

で。

コード:

row = dt.NewRow
row("A") = 6
dt.Rows.Add(row)'★dtに新しい行を追加



これで追加したrow("A") = 6がちゃんと入っているかと思います。


_________________
------------------------------------------
拝啓、さかもとと申します。

[ メッセージ編集済み 編集者: さかもと 編集日時 2007-09-13 12:00 ]

[ メッセージ編集済み 編集者: さかもと 編集日時 2007-09-13 12:58 ]
ts12_
会議室デビュー日: 2005/09/05
投稿数: 10
投稿日時: 2007-09-14 01:01
返信が遅くなりまして申し訳ありません。
元のDataTableに追加されていないから新しいDataTableに追加されない
という事ですね。
ありがとうございました。
1

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