アプリ版:「スタンプのみでお礼する」機能のリリースについて

vbでDataTableの抽出コピー

DataTableから条件抽出したデータで別のDataTableを作成したい

・DataTable1から条件抽出したデータで別のDataTableを作成したい
・データの件数が違うだけでヘッダーなどの内容は同じにしたい


Dim DataTable1 As DataTable ' 既にテーブルデータが入っているとする
Dim DataTable2 As DataTable ' これに一部のデータとヘッダーを複写

Dim DataRow1 As DataRow ' DataRowの一時領域1
Dim DataRow2 As DataRow ' DataRowの一時領域2

<試作1:NG DataRowの使いまわしがきかない>
DataTable2 = DataTable1.Clone
For Each DataRow1 In DataTable1.Select(条件, ソート)
DataTable2.Rows.Add(DataRow1)
Next DataRow1

<試作2:NG ワンクッションかましただけではダメ>
DataTable2 = DataTable1.Clone
For Each DataRow1 In DataTable1.Select(条件, ソート)
DataRow2 = DataRow1
DataTable2.Rows.Add(DataRow2)
Next DataRow1



もしかして、個別セット以外に道はないのでしょうか?

DataTable2 = DataTable1.Clone
For Each DataRow1 In DataTable1.Select(条件, ソート)
DataRow2 = DataTable2.NewRow
DataRow2("item1") = DataRow1("item1")
DataRow2("item2") = DataRow1("item2")
DataRow2("item3") = DataRow1("item3")
DataRow2("item4") = DataRow1("item4")
DataRow2("item5") = DataRow1("item5")
DataRow2("item6") = DataRow1("item6")
DataRow2("item7") = DataRow1("item7")
DataRow2("item8") = DataRow1("item8")
DataTable2.Rows.Add(DataRow2)
Next DataRow1



何か良い方法はありませんか?

A 回答 (1件)

dim dv as DataView


dim rd as DataTableReader
DataTable2 = DataTable1.Clone
' 1)選択条件から DataViewを生成して
dv = new DataView( DataTable1, "条件", "ソート", DataViewRowState.CurrentRows)
’2)ToTableで DataTableを生成し これを引数にDataTableReaderを生成
rd = new DataTableReader(dv.ToTable())
'3)Loadメソッドで 行データを取り込み
DataTable2.Load( rd )
rd.Close

といった具合でできますよ
    • good
    • 2
この回答へのお礼

ありがとうございます。

DataViewとDataTableReaderを使うわけですね。

こちらでもアレコレ試してみましたが、
偶然、「.ItemArray」同士でセットしてもいける事が分かりました。

DataTable2 = DataTable1.Clone
For Each DataRow1 In DataTable1.Select(条件, ソート)
 DataRow2 = DataTable2.NewRow
 DataRow2.ItemArray = DataRow1.ItemArray
 DataTable2.Rows.Add(DataRow2)
Next DataRow1

お礼日時:2013/12/06 09:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています