4

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

3 回答 3

5

我发现处理额外数据的最佳方式是继承 TreeNode。我创建了一个 BaseNode 类,其中包含我想要维护的共享数据,并进一步继承任何特定节点类型的数据。

子类化的价值在于您可以像任何其他类一样维护强大的数据类型和复杂的数据类型......这避免了将数组黑客化为带有管道分隔符等的字符串。

一旦你的节点就位,它就允许你提出相同的树遍历,除了现在你从(比如)BaseNode.MyData(你的所有子类型都将继承)中提取值。

但是,如果您这样做,需要注意一件事:您需要了解您希望这些节点具有多大的权威性。在我的例子中,当用户浏览树时,我们检查数据库缓存以确保我们不需要重新填充数据。

于 2009-02-13T23:46:55.873 回答
5

如果控件的 有一个TreeNodes包含对象的属性,您可以将包含这些所需属性的自定义对象与每个的标签相关联,然后您可以根据需要访问它们。TreeViewTagTreeNode

例如,在.Net4.5 中,它将是这样的:

myTreeNode.Tag = myObject;

Where myTreeNodeis an instance TreeNodeandmyObject是您定义的自定义对象的一个​​实例,其中包含您希望与TreeNode您的TreeView.

这是 MSDN 上关于 TreeNode.Tag 属性的文章:MSDN - TreeNode.Tag Property

于 2013-06-06T18:25:34.923 回答
1

您可能会考虑进一步采用 Godeke 的想法,而不是将 TreeNode 子类化,而是将节点绑定到业务对象集合 - 将本地数据存储在集合子项的属性中。集合逻辑将能够为您提供所需的数据,并且您将获得将数据和逻辑与表示层分离的好处。

于 2009-02-23T10:00:12.273 回答