- PR -

DataTableをソートしたい

1
投稿者投稿内容
damepg
大ベテラン
会議室デビュー日: 2003/03/19
投稿数: 229
お住まい・勤務地: 東京都内
投稿日時: 2003-05-21 12:51
Dim DT as DataTable

このDataTableにはYear,Month,Dayというカラムがあります。
このDataTableをYear,Month,Day順にソートしたいのですが
どうしたら実現出来ますか?
このDataTableは最終的にはDataGridにbindしますが、bindする前に
ソートしてDataGridに表示することを考えています。
SQLでソートしたくありません。
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-05-21 13:15
こんにちは。

DataView を使うというのはどうですか?
damepg
大ベテラン
会議室デビュー日: 2003/03/19
投稿数: 229
お住まい・勤務地: 東京都内
投稿日時: 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")

引用:

Qooさんの書き込み (2003-05-21 13:15) より:
こんにちは。

DataView を使うというのはどうですか?


未記入
ベテラン
会議室デビュー日: 2002/09/10
投稿数: 68
投稿日時: 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 ]
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-05-21 15:03
こんにちは。

引用:

damepgさんの書き込み (2003-05-21 14:04) より:

Dim a As String = dv.Table.Rows(0).Item("Sales_Date")



DataViewのSortではDataTableそのものをソートするわけではないので、
dv.Table.Rows(0).Item("Sales_Date")のところは、
dv.Item(0)("Sales_Date") となるのでは?

また、最初に書かれていた「DataGridにbindする」ですが、
DataView をDataSource として指定することもできたはずです。
damepg
大ベテラン
会議室デビュー日: 2003/03/19
投稿数: 229
お住まい・勤務地: 東京都内
投稿日時: 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")

引用:

通常の名無しさんの3倍さんの書き込み (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 ]

1

スキルアップ/キャリアアップ(JOB@IT)