- - PR -
DataTableをソートしたい
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-05-21 12:51
Dim DT as DataTable
このDataTableにはYear,Month,Dayというカラムがあります。 このDataTableをYear,Month,Day順にソートしたいのですが どうしたら実現出来ますか? このDataTableは最終的にはDataGridにbindしますが、bindする前に ソートしてDataGridに表示することを考えています。 SQLでソートしたくありません。 | ||||
|
投稿日時: 2003-05-21 13:15
こんにちは。
DataView を使うというのはどうですか? | ||||
|
投稿日時: 2003-05-21 14:04
下記をカラムにもつDataTableを日付順にソートしたいのですが、
うまくソートしてくれません。なぜでしょうか? Sales_Year, Sales_Month, Sales_Date 2003 5 18 2003 5 19 2003 5 20 2003 5 21 2003 5 22 2003 5 23 2000 1 1 '日付順にソート Dim dv As DataView = DT_Daily.DefaultView dv.Sort = "Sales_Year, Sales_Month, Sales_Date DESC" Dim a As String = dv.Table.Rows(0).Item("Sales_Date") Dim b As String = dv.Table.Rows(1).Item("Sales_Date") Dim c As String = dv.Table.Rows(2).Item("Sales_Date") Dim d As String = dv.Table.Rows(3).Item("Sales_Date") Dim e As String = dv.Table.Rows(4).Item("Sales_Date") Dim f As String = dv.Table.Rows(5).Item("Sales_Date") Dim g As String = dv.Table.Rows(6).Item("Sales_Date")
| ||||
|
投稿日時: 2003-05-21 14:30
"Sales_Year, Sales_Month, Sales_Date DESC"
だと、Sales_Dateだけ降順で、 前2つは昇順で並べちゃうことになると思います。 日付順っていうことはそういう仕様じゃないですよね。 前2つにもDESCをつけてあげればよいのでは?? [ メッセージ編集済み 編集者: 通常の名無しさんの3倍 編集日時 2003-05-21 14:42 ] 追記2: 追記した事項は誤りでした。やってみるとランタイムエラー。 あとQooさんの指摘事項のほうが核心っぽいっすね。 失礼しました。 >追記: >フィールドが文字列型なら、 >Sales_Year + Sales_Month + Sales_Date DESC >でもいけましたね。 ↑これが誤り。 [ メッセージ編集済み 編集者: 通常の名無しさんの3倍 編集日時 2003-05-21 15:21 ] | ||||
|
投稿日時: 2003-05-21 15:03
こんにちは。
DataViewのSortではDataTableそのものをソートするわけではないので、 dv.Table.Rows(0).Item("Sales_Date")のところは、 dv.Item(0)("Sales_Date") となるのでは? また、最初に書かれていた「DataGridにbindする」ですが、 DataView をDataSource として指定することもできたはずです。 | ||||
|
投稿日時: 2003-05-21 16:49
下記の処理を追加することで日付順にソート(昇順、古いものから表示)できました。
ありがとうございました。 Dim dv As DataView = DT_Daily.DefaultView dv.Sort = "Sales_Year ASC, Sales_Month ASC, Sales_Date ASC" Dim a As String = dv.Item(0)("Sales_Date") Dim b As String = dv.Item(1)("Sales_Date") Dim c As String = dv.Item(2)("Sales_Date") Dim d As String = dv.Item(3)("Sales_Date") Dim e As String = dv.Item(4)("Sales_Date") Dim f As String = dv.Item(5)("Sales_Date") Dim g As String = dv.Item(6)("Sales_Date")
| ||||
1
