4

データベースのレコードをリストビューで表示したいのですが、取得には時間がかかる場合があります。RetrieveVirtualItemを使用して、新しいListViewItemが必要になったときに通知し、ダミーアイテムを追加して、取得を開始できます。しかし、データベースがレコードを返すとき、レコードをどうすればよいですか?ListViewがVirtualModeのときに、ListViewのItemsコレクションを更新できません。ListViewにアイテムをリロードするように指示する方法はありますか?または、ListViewItemへの参照を保持して、それを設定することはできますか?どちらも機能しない場合、仮想モードでListViewに非同期でデータを入力するにはどうすればよいですか?

4

1 に答える 1

9

ListView の更新が必要になると、RetrieveVirtualItem ハンドラーが呼び出されます。データがまだ利用できず、待つことができない場合は、ダミー項目を作成する必要があります (RetrieveVirtualItem を処理しないと例外が発生します)。

データの準備ができたら、コントロールを無効にすることができます。これにより、表示されているアイテムごとに RetrieveVirtualItem が再度呼び出されます。コントロール全体を無効にする代わりに、仮想モードと通常モードで機能する ListView コントロールの RedrawItems メソッドを使用して、どの項目を再描画するかを制御できます。

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.redrawitems.aspx

しばらく時間がかかる場合は、レコードをバッチでダウンロードする価値があるようです. また、データベース操作にコストがかかる場合は、ListItems のキャッシュを調査する価値があります (処理する必要がある CacheVirtualItems イベントがあります)。

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.cachevirtualitems.aspx

これが役立つことを願っています。

于 2008-12-03T15:45:48.817 に答える