元の DataTable には「出席番号」「名前」「点数」が適当な順番で入っている。
例えば、
1 ロバート 252 ミッチェル 893 クリス 254 ブラウン 675 キヨシ 18
みたいに出席番号順とかで。
これを、「点数の降順」「出席番号の昇順」という条件でソートしたい。
2 ミッチェル 894 ブラウン 671 ロバート 253 クリス 255 キヨシ 18
にしたいわけやね。
DataTable では並び替え(ソート)は出来ないから、一旦 DataView を作成し、そこでソートをする。
Dim dv As DataView = ds.table.DefaultViewdv.Sort = "tokuten DESC, bangou"
こんな風に。
ここまでは良い。実際、並び替えは正常に行われたし。
で、並び替えた結果を別の DataTable に「並び替えた状態を保持したまま」コピーしたいんだけど、
Dim new_ds As New HogehogeDataSetViewnew_ds.table.Merge(CType(dv.Table, HogehogeDataSetView.tableDataTable))
なんてキャストしてマージしちゃうと、「並び順がリセット」されちゃうのね・・・
仕方ないので、
Dim new_ds As New HogehogeDataSetViewFor Each dvr As DataRowView In dvDim dr As HogehogeDataSetView.tableRow = CType(dvr.Row, HogehogeDataSetView.tableRow)new_ds.table.ImportRow(dr)Nextnew_ds.AcceptChanges()
なんてやったんだけど(並び替えた結果を1件1件頭から追加していったわけやな)、なんか美しくないな。
一発でピシっとセットしたいわ。
VB.NET マスターの方、良い方法をアドバイスプリーズ!!
コメントする