C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DataSetをソートする方法


(過去ログ 96 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■57321 / inTopicNo.1)  DataSetをソートする方法
  
□投稿者/ だうん中 (1回)-(2011/02/22(Tue) 18:25:24)

分類:[.NET 全般] 

こんにちは、
Microsoft Visual Studio 2005、Microsoft Visual Basic 2005
の環境で開発をしておりまして、
下記のようなDataSet型のlistDataを
Item("Code") 順で並び替えたいのですが、何か方法はありますでしょうか。
DataViewなども調べてみたのですが、いまいち使い方が分かりませんでしたものでして。

dim listData As DataSet
listData1.Tables(0).Rows(0).Item("Code") = 2
listData1.Tables(0).Rows(0).Item("Name") = "てすと1"
listData1.Tables(0).Rows(1).Item("Code") = 1
listData1.Tables(0).Rows(1).Item("Name") = "てすと2"
並び替えて
listData2.Tables(0).Rows(0).Item("Code") = 1
listData2.Tables(0).Rows(0).Item("Name") = "てすと2"
listData2.Tables(0).Rows(1).Item("Code") = 2
listData2.Tables(0).Rows(1).Item("Name") = "てすと1"
という感じで取得したい。

引用返信 編集キー/
■57324 / inTopicNo.2)  Re[1]: DataSetをソートする方法
□投稿者/ shu (467回)-(2011/02/22(Tue) 22:18:59)
No57321 (だうん中 さん) に返信

並び替えてどのように使用するかにもよると思いますが、
DatasetはDataTableの集合なので並び替えはDataTableが対象になるかと思います。
listData2.Tables(0)というのがDataTableになります。
これを
Dim tbl as Datatable = listData2.Tables(0)としたとき
tbl.DefaultView.Sort = "Code"
とすればどこかのDataSourceに張り付いている場合は並び替えが行われます。
tbl.Select("","Code")
とすれば並び替えが行われた状態でDatarow(行データ)の配列を取得することが出来ます。



tbl.Rowsでの中身はどちらでも順番が変わりません。Rowsの中身の順番を変えるには
中身をこつこつと入れ替えていかなければ駄目です。
引用返信 編集キー/
■57328 / inTopicNo.3)  Re[1]: DataSetをソートする方法
□投稿者/ 魔界の仮面弁士 (2081回)-(2011/02/22(Tue) 23:05:18)
No57321 (だうん中 さん) に返信
> DataViewなども調べてみたのですが、いまいち使い方が分かりませんでしたものでして。

DateView は、
 Dim view As New DataView(listData1.Tables(0))
または
 Dim view As DataView = listData1.DefaultView
のようにして取得できます。
(DataSet/DataTable をデータバインドしている場合には、自動的に DefaultView が使われています)


並び替え指定は、SQL の ORDER BY 句のように
 view.Sort = "Code"
と指定すれば OK です。降順にしたいなら "Code DESC" のように DESC を付与します。
複数列での並び替えが必要な場合は "Col1, Col2" のようにカンマで区切って指定してください。


データバインドしている場合は、.DefaultView.Sort を変更することで並び変わったことを確認できますが、
もしもコードで列挙したい場合には、
 For Each rowView As DataRowView In view
  MsgBox( rowView("Code") )
 Next
または
 For n As Integer = 0 To view.Count - 1
  MsgBox( view(n)("Code") )
 Next
のようにすることで、並び替えた順にデータを取り出すことができます。

ただし上記のコードでは、DataTable を列挙して DataRow を得ているのではなく、
DataView を列挙して DataRowView を得ている事に注意してください。
(DataView は、DataTable 内の並び順を変化させるわけではありません)

もしも(DataRowView ではなく)元の DataRow への参照が必要な場合には、
DataRowView の Row プロパティを使うことができます。
たとえば、型付データセットを使っているような場合には
 For Each rowView As DataRowView In view
  Dim row As DataSet1.Table1Row = DirectCast(rowView.Row, DataSet1.Table1Row)
  MsgBox( row.Code )
 Next
のように記述できます。


ちなみに DataView では、Sort プロパティによる並び替えだけではなく
RowFilter プロパティ/ RowStateFilter プロパティによるフィルタリング機能も
有しています。余力があればヘルプ等で確認しておいてください。
引用返信 編集キー/
■57335 / inTopicNo.4)  Re[2]: DataSetをソートする方法
□投稿者/ マサヤ (263回)-(2011/02/23(Wed) 00:23:30)
http://www.atmarkit.co.jp/fdotnet/dotnettips/363dtsort/dtsort.html
とりあえず、参考リンク貼っておきますね。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -