- - PR -
ListViewのVirtualMode時のソートについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-07-20 01:01
いつもお世話になっております。
現在.NET2.0 C#、WindowsXPでWindowsアプリケーションを開発しております。 ListViewを使ったエクスプローラライクなフォームを作成しているのですが、 いろいろあってVirtualModeで動作させたところ、 ListViewのソートが出来なくなりました。 VirtualModeを使用する前は、ListViewのカラムクリック時に、 ListViewItemCompareを使用して、クリックされたカラム番号でソートしていたのですが、 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− listView.ListViewItemSorter = listViewItemSorter; // クリックされたカラム番号の設定 listViewItemSorter.Column = e.Column; // ソート処理 listView.Sort(); −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− VirtualModeに変えた途端、InvalidOperationExceptionが発生し、 「仮想ListViewでは並び替えは許可されていません。」となってしまいました。 読んで字の如くといった例外なのですが、VirtualModeにした場合に、 ソートを行う方法はあるのでしょうか? | ||||
|
投稿日時: 2007-07-20 04:22
RetrieveVirtualItemイベントで ソートを終えたリストの指定されたIndexのListItemを返せばいいだけです。 ソート自体は自分でがんばらないとだめです。 [ メッセージ編集済み 編集者: れい 編集日時 2007-07-20 05:08 ] | ||||
|
投稿日時: 2007-07-20 09:40
れいさん返答ありがとうございます。
ひょっとして簡単な方法があるのでは・・・ と思い投稿させて頂いたのですが、やはり自分で頑張らないといけないのですね。 フィールドに保持してあるListViewItemから自分でソートするようにしてみます。 | ||||
|
投稿日時: 2007-08-08 00:16
私も仮想モードに関していろいろ検証を行っているところなのですが、 ListViewItem の配列をフィールドに保持してしまうと 仮想モードのメリット『ListViewItem が消費するリソースを抑える』がなくなってしまわないでしょうか。 一方、RetrieveVirtualItem イベントで必要な分だけ ListViewItem を逐次生成していく場合、小さなリソースの生成・解放が繰り返されるのだろうと考えられます。 リストのデータソースとする DataTable や配列なども保持しているとした場合、 こちらのほうがよいのではないかと思うのですがいかがでしょうか。 ListViewItem の生成の回数も増えますので速度面では不利かもしれません。 |
1