2011-06-09 72 views
0

我有一個Nhibernate數據庫,它提供數據作爲分層列表<>。我在我的Windows窗體GUI和Backgroundworker中有一個TreeView,它填充了所有根節點和它們的子節點的樹視圖(沒有更多因爲從NHibernate延遲加載異常,但這是好的,因爲我期望用戶將在TreeView中有很多節點)。如何通過Backgroundworker將節點添加到數據庫的TreeView中,並在擴展Windows Forms C#中的節點時重新加載子節點?

到根節點和他們的孩子添加到TreeView的過程中效果很好,但是當我點擊一個節點,以擴大它的孩子們的所有兒童都應從數據庫加載並添加到TreeView。節點從數據庫成功請求並存儲在緩衝區列表中(點擊節點展開時)。

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

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

+0

延遲加載不是問題,因爲我從數據庫初始加載時得到根節點的子節點。 – Daraku 2011-06-09 08:39:32

回答

0

This SO Question應該對延遲加載提供一些幫助。

它使用了一個線程池而不是後臺工作器,你可以在google上找到/ against的參數,但是在我看來,在Winforms中使用線程池是不錯的選擇。

用上面的帖子引導你,將正在擴展的節點傳遞給worker。獲得填充節點所需的數據後,請使用標準If ##.InvokeRequired Pattern在節點上執行實際工作。

希望有所幫助。

+0

延遲加載不是一個問題,因爲我得到了根節點的子節點的孩子們的額外負載是問題。 (在我的問題中沒有提及,我將其添加爲評論)。但你給了我一個想法如何解決這個問題,你的「需要調用」提示,我會研究它,謝謝 – Daraku 2011-06-09 08:38:12

+0

關於延遲加載,由[FredrikMörk]建議的模式(http:// stackoverflow。 com/users/93623/fredrik-mork)在我鏈接的第一篇文章中是一個非常流行的模式。如果這次不使用它,請考慮下次使用它。 ;-)讓我知道你是否想要InvokeRequired模式的更多幫助。祝你好運 – Smudge202 2011-06-09 08:47:26

相關問題