2008-12-03 52 views
4

我想在列表視圖中顯示來自我們數據庫的記錄 - 但檢索可能需要很長時間。我可以使用RetrieveVirtualItem告訴我什麼時候需要一個新的ListViewItem,添加一個虛擬物品並開始檢索;但是當數據庫返回記錄時我該如何處理記錄?當ListView處於VirtualMode模式時,我無法更新ListView的Items集合。有沒有辦法告訴ListView重新加載一個項目?或者我可以只保留對ListViewItem的引用並填充它?如果這兩者都不起作用,我還能如何以異步方式在虛擬模式下填充ListView?如何異步填充虛擬模式下的ListView?

回答

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

我希望這有助於。