2009-02-13 66 views
4

TreeView的是提出一個層次的用戶,但是想象一下,一個很好的方式隨層級以下情形如下圖所示:在這裏你需要做一個插入到數據庫在TreeView節點上存儲數據的最佳方式是什麼?

Building 1 
-Tenant 1 
    - Payment 1 
    - Payment 2 
Building 2 
-Tenant 1 
    - Payment 1 
-Tenant 2 
    - Payment 1 
    - Payment 2 

當用戶點擊付款節點。基本上,插入所需的變量是Building_Id,Tenant_Id,Payment_Id。組裝這些方法之一是步行到每一個節點的父:

Building_Id = Payment.ParentNode.ParentNode.Id 

是更好地所有的付款節點的ID的值的存儲在下面的格式,然後解析值Building_Id, Tenant_Id,Payment_Id?例如:

Payment.Value = "1|2|1" 

回答

4

我發現處理附加數據的最好方法是子類TreeNode。我創建了一個BaseNode類,它包含我想要維護的共享數據,並從任何特定節點類型繼承這些數據。

子類化的價值在於,您可以像其他任何類一樣保持強大的數據類型和複雜的數據類型......避免使用管道分隔符等將數組轉換爲字符串。除了現在你從BaseNode.MyData(你的所有子類型將繼承)拉取值以外,它允許你提出相同的樹步。

有一點需要注意,如果你這樣做,但你需要了解你想要這些節點的權威性。在我的情況下,當用戶導航樹時,我們檢查數據庫緩存以確保我們不需要重新填充數據。

+0

很好的答案 - 正是我在找的東西。謝謝! – 2009-02-14 12:00:55

1

您可能會考慮進一步考慮Godeke的想法,而不是繼承TreeNode的子類,將節點綁定到業務對象集合 - 將本地數據存儲在集合children的屬性中。收集邏輯將能夠爲您提供所需的數據,並且您可以從表示層獲得分離數據和邏輯的好處。

5

如果TreeView控制的TreeNodes具有Tag屬性保存的對象,則可以將包含與每個TreeNode的標籤那些所需性質的定製對象相關聯,則可以根據需要進行訪問。

例如,在.Net爲4.5,這將是這樣的:

myTreeNode.Tag = myObject; 

myTreeNodeTreeNodemyObject一個實例是你定義它包含了你想要的數據的自定義對象的實例與您的TreeViewTreeNode相關聯。

以下是有關TreeNode.Tag屬性的MSDN文章:MSDN - TreeNode.Tag Property

相關問題