- PR -

ListViewのVirtualMode時のソートについて

1
投稿者投稿内容
3TR
会議室デビュー日: 2005/04/19
投稿数: 7
投稿日時: 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にした場合に、
ソートを行う方法はあるのでしょうか?

れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-07-20 04:22
引用:

3TRさんの書き込み (2007-07-20 01:01) より:
いろいろあってVirtualModeで動作させたところ、
ListViewのソートが出来なくなりました。
(略
ソートを行う方法はあるのでしょうか?



RetrieveVirtualItemイベントで
ソートを終えたリストの指定されたIndexのListItemを返せばいいだけです。

ソート自体は自分でがんばらないとだめです。

[ メッセージ編集済み 編集者: れい 編集日時 2007-07-20 05:08 ]
3TR
会議室デビュー日: 2005/04/19
投稿数: 7
投稿日時: 2007-07-20 09:40
れいさん返答ありがとうございます。

ひょっとして簡単な方法があるのでは・・・
と思い投稿させて頂いたのですが、やはり自分で頑張らないといけないのですね。
フィールドに保持してあるListViewItemから自分でソートするようにしてみます。
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2007-08-08 00:16
引用:

3TRさんの書き込み (2007-07-20 09:40) より:

フィールドに保持してあるListViewItemから自分でソートするようにしてみます。




私も仮想モードに関していろいろ検証を行っているところなのですが、
ListViewItem の配列をフィールドに保持してしまうと
仮想モードのメリット『ListViewItem が消費するリソースを抑える』がなくなってしまわないでしょうか。

一方、RetrieveVirtualItem イベントで必要な分だけ ListViewItem を逐次生成していく場合、小さなリソースの生成・解放が繰り返されるのだろうと考えられます。
リストのデータソースとする DataTable や配列なども保持しているとした場合、
こちらのほうがよいのではないかと思うのですがいかがでしょうか。
ListViewItem の生成の回数も増えますので速度面では不利かもしれません。
1

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