- PR -

DataGrid内での並び替えについて

1
投稿者投稿内容
やま
常連さん
会議室デビュー日: 2004/07/07
投稿数: 26
投稿日時: 2004-10-13 12:10
やま と申します。
いつもお世話になっております。

Webアプリで作成されたログファイルの中身を表示するDataGridを作っています。
ログファイルには、日時、メッセージ等々、1つのログが1行に書かれています。
DataGridに表示する時の条件として、日時の新しいもの(つまり一番下の行)から表示する。
という条件があります。
そこで、
dt.DefaultView.Sort = "日時 DESC";
として並び替えを行ったのですが、
2004/10/13 9:59 と 2004/10/13 10:01とでは
理想としては後者が出て欲しいのに、前者が先に表示されます。
これは、並び替えを行うときに9時と10時を
(9)と(10)で比較するのではなく、(9)と(1)(0)で比較されて(9)と(1)とでは
(9)の方が大きいと判断されたからだと思われます。

また、別の方法として表示しない列として、通し番号を持つ列を追加して
それによって並び替えも試みたのですが日時のときと同様に、
999番目と6000番目では1桁目だけを比べて999番目のほうが大きいと判断されてしまいました。


そこで、どなたか他の方法等を知っている方がいらしたら、
ご教授願いたく、書き込みをしました。
よろしくお願いいたします。

_________________
じいじ
大ベテラン
会議室デビュー日: 2003/11/11
投稿数: 223
投稿日時: 2004-10-13 12:22
直感でごめんなさい・・・・

「文字列だから」って思ったのですが・・・・
やま
常連さん
会議室デビュー日: 2004/07/07
投稿数: 26
投稿日時: 2004-10-13 13:46
申し訳ありません。
長々と説明しながら説明が足りなかったです。
ご指摘のとおり、文字列だから判定ができていないのです。
そこで、DataTableへ代入する値をDateTime型へ変換してから
DataTableへ追加したのですが、並び替えを行うときには
文字列として並び替えられてしまうためできません。

そこで、具体的にはDateTime型から文字列型へ変換するときに
時間表記を「2004/10/13 09:59」のように0パディングする方法や
その他の方法を知っている方がいらっしゃいましたら
お願いします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-10-13 14:03
DataTableの列であるDataColumnは型をもっているので
それをStringからDataTimeにすればイイのでしょうか?
dtはDBから取得したのか、自作したのかはわからないですが。
ToStringで書式していすれば文字ベースでも比較は可能です。
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-10-13 15:13
書式設定ですね。
WindowsFormの例です。Webは少し違うかもしれません。

DataGrid に DataGridTableStyle を追加して DataGridColumnStyle を追加しましょう。
DataGridColumnStyle は具体的には DataGridTextBoxColumn をカラム数分追加します。
DataGridTextBoxColumn.Format プロパティで書式設定できます。
yyyy/MM/dd hh:mm:ss と設定すればよかったと思います。

_________________
〜〜〜〜〜〜〜〜
えムナウ
http://www.geocities.jp/mnow
mnow@yahoo.co.jp
〜〜〜〜〜〜〜〜

[ メッセージ編集済み 編集者: えムナウ 編集日時 2004-10-13 15:14 ]
やま
常連さん
会議室デビュー日: 2004/07/07
投稿数: 26
投稿日時: 2004-10-13 15:35
やま です
DBへ登録する際の日付文字列の設定として
これまでは、DateTime型変数.ToString("g");としていたのですが、
DateTime型変数.ToString("yyyy\/MM\/dd HH\:mm");
とすることによって、2004/10/13 09:59のようにすることで対処できました。

お返事をくださったみなさん、ありがとうございました。
1

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