リストビューをソートするには?

解決


kensaku  2005-01-12 00:06:20  No: 55973  IP: [192.*.*.*]

お世話になります。

環境
OS:XP
VC++.NET 2003 フォームアプリケーション(.NET)

リストビューのソートについて下記のページを参考に作成しましたが、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformslistviewclasslistviewitemsortertopic.asp 

リストビューのヘッダを押すたびに昇順、降順が切り替わり表示されるようにしたいのですが、どのようにしたらよいでしょうか。

お願いします。

編集    削除
シャノン  2005-01-12 00:37:00  No: 55974  IP: [192.*.*.*]

昇順ソート用と降順ソート用の2つの IComparer を作っておいて、ヘッダがクリックされたときに、現在昇順ソートされていれば降順用に、現在降順ソートされていれば昇順用に切り替えればよいのでは?

編集    削除
kensaku  2005-01-12 00:41:42  No: 55975  IP: [192.*.*.*]

お返事ありがとうございます。

現在のリストが昇順ソートか降順ソートされているかというのは、プロパティで判断できるのでしょうか。それともフラグを使って判断するのでしょうか。

よろしくお願いいたします。

編集    削除
シャノン  2005-01-12 01:09:36  No: 55976  IP: [192.*.*.*]

ListView クラスのメンバをざっと眺めてみてください。
現在のソート順を一発で取得できそうなプロパティがありますか?
Sorting プロパティがありますが、これは違いそうですね。
他には…ありませんね。じゃあ自前で管理しておくしかないのでしょう。

ただ、一口にフラグと言っても、その持ち方は用途によって様々です。
DataView を連結していれば、DataView.Sort プロパティで判断できるかもしれません。
ListViewItemSorter に設定された、IComparer を実装するクラスにプロパティとして持たせても良いでしょう。
ColumnHeader クラスから派生した独自ヘッダオブジェクトを作って、そこにプロパティを設けるという手もあるかもしれません。

方法は一通りではありません。要求に応じて、最適解を探してみてください。

編集    削除
kensaku  2005-01-12 01:36:40  No: 55977  IP: [192.*.*.*]

いつもありがとうございます。

あるクラスにpublic static変数を持たせて解決しました。
どうもありがとうございました。

編集    削除