什么是最好的方式将数据存储在一个树视图节点?
-
23-08-2019 - |
题
树视图是一个好的方式本的层次的用户,但是想象一下下面的情况的层次结构如下:
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
它是更好地储存的所有价值观的身份证上的付款节点在以下格式,那么分析价值为Building_Id,Tenant_Id,Payment_Id?例如:
Payment.Value = "1|2|1"
解决方案
我发现处理的附加数据的最佳方法是继承树节点。我创建包含的共享数据欲保持BaseNode类,并且从进一步的继承对任何特定的节点类型。
子类的价值在于可以保持强的数据类型和复杂的数据类型,就像任何其他类...这避免黑客阵列与管分离器等的字符串。
一旦你有你的节点来代替它允许同一棵树走你建议,但现在你从(比方说)BaseNode.MyData(其中所有的子类型将继承)拉动的值。
有一点需要注意,因为如果你这样做,虽然:你必须了解你要如何权威性这些节点是。在我的情况下,当用户浏览我们与数据库缓存查询树,以确保我们不需要重新填充数据。
其他提示
如果的 TreeNodes
的 TreeView
控制有 Tag
酒店,拥有一个目的,你可以联系一定义对象包含那些希望的特性与每 TreeNode
's的标签,然后你可以访问它们是必要的。
例如,在 .Net
作为4.5,它将是这样的:
myTreeNode.Tag = myObject;
哪里 myTreeNode
是的一个实例 TreeNode
和 myObject
是的一个实例定对象的定义,其中包含的数据你希望有关联 TreeNode
你的 TreeView
.
这是一篇文章上MSDN在树节点.标记财产: MSDN-树节点.酒店的标记.
您可能会考虑Godeke的想法进一步,而不是继承的树节点,并配合节点的业务对象集合 - 存储在收集儿童的性质您的本地数据。收集逻辑就能给你所需要的数据,并且获得从表现层分离数据和逻辑的优势。