DataView で並び替えた結果を保持したまま DataTable にキャストできんのかいな

元の DataTable には「出席番号」「名前」「点数」が適当な順番で入っている。
例えば、

1 ロバート 25
2 ミッチェル 89
3 クリス 25
4 ブラウン 67
5 キヨシ 18

みたいに出席番号順とかで。

これを、「点数の降順」「出席番号の昇順」という条件でソートしたい。

2 ミッチェル 89
4 ブラウン 67
1 ロバート 25
3 クリス 25
5 キヨシ 18

にしたいわけやね。

DataTable では並び替え(ソート)は出来ないから、一旦 DataView を作成し、そこでソートをする。

Dim dv As DataView = ds.table.DefaultView
dv.Sort = "tokuten DESC, bangou"

こんな風に。
ここまでは良い。実際、並び替えは正常に行われたし。

で、並び替えた結果を別の DataTable に「並び替えた状態を保持したまま」コピーしたいんだけど、

Dim new_ds As New HogehogeDataSetView
new_ds.table.Merge(CType(dv.Table, HogehogeDataSetView.tableDataTable))

なんてキャストしてマージしちゃうと、「並び順がリセット」されちゃうのね・・・

仕方ないので、

Dim new_ds As New HogehogeDataSetView
For Each dvr As DataRowView In dv
    Dim dr As HogehogeDataSetView.tableRow = CType(dvr.Row, HogehogeDataSetView.tableRow)
    new_ds.table.ImportRow(dr)
Next
new_ds.AcceptChanges()

なんてやったんだけど(並び替えた結果を1件1件頭から追加していったわけやな)、なんか美しくないな。
一発でピシっとセットしたいわ。

VB.NET マスターの方、良い方法をアドバイスプリーズ!!

トラックバック(0)

このブログ記事を参照しているブログ一覧: DataView で並び替えた結果を保持したまま DataTable にキャストできんのかいな

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/3130

コメントする

このブログ記事について

このページは、shinodaが2014年10月 2日 19:22に書いたブログ記事です。

ひとつ前のブログ記事は「XML::Simple を使った Perl での XML 出力(つづき)」です。

次のブログ記事は「今シーズンのソフトボールリーグも終了した」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら