2009-09-15 119 views
3

我正在嘗試爲我的IRC客戶端構建服務器/網絡設置系統。由於網絡和服務器的關係性質,我選擇使用SQLite來存儲所有內容。「綁定」到TreeView?

我的第一步是進行設置對話框,這是你可能期望的;包含網絡和服務器的TreeView,以及側面的空間來編輯它們的設置。

我對ADO.NET有一點(微小的)經驗,但只是基本的選擇和更新,沒有任何關係。 所以我的問題是搞清楚如何將一行關聯到TreeNode。我已經爲服務器和網絡定製了TreeNode對象,並且它可以與一些手動輸入的數據一起使用。

所以我想我不需要「綁定」,我只需要將數據加載到TreeView並能夠輕鬆更新設置。

回答

3

在我們的項目中,我們通常使用TreeNode的Tag屬性將行與TreeNode相關聯,並且我們無需綁定即可手動將數據加載到TreeView中。

3

填充樹視圖時的主要問題是您是否在每個節點展開時執行所有節點的完全加載或實施某種延遲加載方法。

如果您的節點少於500個,並且節點數量不會增長,那麼填充完整的樹只會執行可接受的操作。否則,延遲加載方法是最好的。

最簡單的方法是在BeforeExpand事件中填充節點的子節點。然而,TreeView將不會顯示+/-指示節點有子節點,直到您實際添加子節點爲止。因此,在填充父節點時,應檢查邏輯項(數據行)是否有子節點,如果是,則添加一個虛擬節點。

我發現繼承自TreeNode的自定義類是定義虛擬節點的最簡單方法之一。然後,您可以使用Is運算符在BeforeExpand()中檢查它。

然後,當用戶展開父節點時,在BeforeExpand事件中,檢查是否存在虛擬節點,是否存在刪除它,然後填充實際節點。對於這些節點中的每一個節點,檢查子節點,並根據需要填充標記屬性和虛擬節點。

將每個節點的Tag屬性設置爲某種有意義的對象/數據。這將允許您在需要時輕鬆填充子節點。只要知道它是類型對象,就需要在需要時將它正確地轉換爲實際的數據類型。

+0

我沒有考慮到「延遲加載」,正如你所說的,謝謝。 關於Tag屬性,我已經有了自定義的TreeNode對象,所以它不是必須的。這樣我就可以輕鬆地分辨出被點擊的內容以及需要在表單的另一側顯示哪些文本框。 在數據庫方面,我仍然不確定要如何設置標籤屬性。 – 2009-09-15 04:02:38