DOBON.NET DOBON.NETプログラミング掲示板過去ログ

アイテムを高速でリストビューに表示できないでしょうか。

環境/言語:[.NET, XP]
分類:[.NET]

いつもお世話になります。

VB.NETにてViewプロパティをDetailsに設定したリストビューに、オラクルデータベースから取得したアイテムを表示させています。
DBからの検索結果が10000件を超える場合もあるのですが、その場合は表示までに非常に時間がかかります。
現在は取得したレコードの最初の行から各列の値をアイテムとサブアイテムに設定し、終わったらMoveNextで次のデータへ。同じ処理をレコードがなくなるまでLoopする状態です。10000件表示するには数分必要です。
もっと高速で表示できる方法はありますでしょうか。それともリストビューというコントロールは大量のデータ表示には適さないのでしょうか。よろしくお願いします。
> VB.NETにてViewプロパティをDetailsに設定したリストビューに、オラクルデータベースから取得したアイテムを表示させています。
> DBからの検索結果が10000件を超える場合もあるのですが、その場合は表示までに非常に時間がかかります。

BeginUpdate、EndUpdateは必須。
数百件単位にAddRangeするとか、Framework2.0ならListView.VirtualModeの検討。
このぐらいですか。
あとは10000件を表示する必要性の再検討。。。
> 現在は取得したレコードの最初の行から各列の値をアイテムとサブアイテムに設定し、終わったらMoveNextで次のデータへ。同じ処理をレコードがなくなるまでLoopする状態です。10000件表示するには数分必要です。

一回の表示で全件表示する必要があるのかは分かりませんが、
ユーザーの操作により表示範囲外のデータが必要になるタイミングで
データを毎回追加していくのは駄目ですか?

たとえば、100件表示中に101件目が必要になりしだい101件目〜200件目までを
追加で表示して
あまりにも重くなるようなら、前のデータは破棄して追加ではなく何件か毎に
アイテムをクリアして追加しなおすとか駄目ですか?

何か見当違いの事をいっていたら申し訳ないです。

以上
> BeginUpdate、EndUpdateは必須。
> 数百件単位にAddRangeするとか、Framework2.0ならListView.VirtualModeの検討。
> このぐらいですか。
> あとは10000件を表示する必要性の再検討。。。

まどかさん、いつもお返事ありがとうございます。
10000件・・・おっしゃるとおりですね。
ちなみにFrameworkは1.1です。

>たとえば、100件表示中に101件目が必要になりしだい101件目〜200件目までを
>追加で表示して
>あまりにも重くなるようなら、前のデータは破棄して追加ではなく何件か毎に
>アイテムをクリアして追加しなおすとか駄目ですか?

じゅでさん、ご意見ありがとうございます。
見当違いだなんてとんでもないです。

私の言葉が足りず申し訳ありませんでした。
データベースへの検索範囲はユーザーが指定可能の状態なので、対象が多くなる場合(例えば500件以上など)には処理対象件数の表示と続行してよいか確認を取るダイアログを表示しております。
対象が多い場合はユーザーが検索範囲を絞れば済みますし、続行してしまっても途中でキャンセルできるようにしてあります。
なので、現状10000件表示しなければならない必要はありませんし、そうなってしまう危険もないのですが、どうせなら大量の処理でも高速に終わらせられないかと思い質問させていただいた次第です。

AddRangeは私のまだ知らないメソッドですのでこれから勉強してみようと思います。
ありがとうございます。よろしければ次回もよろしくお願いいたします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板