|
1
3
在我们的项目中,我们通常使用TreeNode的Tag属性将行与TreeNode相关联,并且在不绑定的情况下将数据手动加载到TreeView中。 |
|
|
2
3
填充Treeview时的主要问题是,在扩展每个节点时,是完全加载所有节点还是实现某种延迟加载方法。 只有当节点数少于500个时,填充完整的树才能正常执行,并且节点数不会增加。否则,延迟加载方法是最好的。 最简单的方法是在BeforeExpand事件中填充节点的子节点。但是,TreeView将不会显示一个+/,表示节点有子节点,直到您实际向其添加子节点。因此,在填充父节点时,应该检查逻辑项(数据行)是否有子节点,如果有,则添加一个虚拟节点。 我发现从TreeNode继承自定义类是定义虚拟节点的最简单方法之一。然后可以在BeforeExpand()中使用Is运算符检查它。 然后,当用户展开父节点时,在BeforeExpand事件中,检查是否存在虚拟节点,是否存在delete节点,然后填充实际节点。对于这些节点中的每一个,检查子节点,并根据需要填充标记属性和虚拟节点。 将每个节点的标记属性设置为某种有意义的对象/数据。这将允许您在需要时轻松填充子节点。请注意,它是object类型的,需要时需要将其正确转换为实际的数据类型。 |