簡體   English   中英

如何通過Backgroundworker將節點添加到數據庫中的TreeView並在Windows中擴展節點時重新加載子節點

[英]How do I add Nodes through Backgroundworker to a TreeView from a Database and reload Children while expanding a Node in Windows Forms C#?

我有一個 Nhibernate 數據庫,它提供數據作為分層列表<>。 I have a TreeView in my Windows Forms GUI and a Backgroundworker which populate the TreeView with all Root Nodes and their Children (nothing more because of Lazy loading exception from NHibernate but this is okay because I expect that the user will have many Nodes in the TreeView )。

將根節點及其子節點添加到 TreeView 的過程運行良好,但是當我單擊節點展開它時,所有子節點的子節點都應從數據庫加載並添加到 TreeView。 從數據庫成功請求節點並存儲在緩沖區列表中(單擊節點展開它時)。

之后,我嘗試了一些想法,例如重建 TreeView 並完全重新填充它,但是使用此解決方案我遇到了所有展開的節點都折疊的問題,因此我嘗試存儲展開的節點並且它工作。 但我對這個解決方案不太滿意,我覺得它可以做得更容易,因為我不想每次用戶擴展節點時都重新填充 TreeView。

如何在不重新填充整個 TreeView 的情況下從數據庫重新加載 TreeNode 的子節點並將其顯示在 TreeView 中?

這個 SO Question應該為延遲加載提供一些幫助。

它使用線程池而不是后台工作程序,您可以在 google 上找到 arguments for/against on/against,但在我看來,在 Winforms 中使用線程池是一個不錯的選擇。

通過上面的帖子來指導您,將正在擴展的節點傳遞給 worker。 獲得填充節點所需的數據后,使用標准If ##.InvokeRequired 模式在節點上執行實際工作。

希望有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM