代码之家  ›  专栏  ›  技术社区  ›  Brian Ortiz

“绑定”到树视图?

  •  3
  • Brian Ortiz  · 技术社区  · 16 年前

    我正在尝试为IRC客户端构建服务器/网络设置系统。由于网络和服务器的关系性质,我选择使用SQLite来存储所有内容。

    我的第一步是创建“设置”对话框,就像您所期望的那样;一个保存网络和服务器的树状视图,以及一个可以编辑其设置的侧边空间。

    我对ADO.NET有一点经验,但只是基本的选择和更新,没有关系。 所以我的问题是如何将行与TreeNode关联起来。 我已经为服务器和网络定制了TreeNode对象,并且它可以很好地处理一些手动输入的数据。

    所以我想我不需要“绑定”本身,我只需要将数据加载到TreeView中,并且能够轻松地更新设置。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Beatles1692    16 年前

    在我们的项目中,我们通常使用TreeNode的Tag属性将行与TreeNode相关联,并且在不绑定的情况下将数据手动加载到TreeView中。

        2
  •  3
  •   Ash    16 年前

    填充Treeview时的主要问题是,在扩展每个节点时,是完全加载所有节点还是实现某种延迟加载方法。

    只有当节点数少于500个时,填充完整的树才能正常执行,并且节点数不会增加。否则,延迟加载方法是最好的。

    最简单的方法是在BeforeExpand事件中填充节点的子节点。但是,TreeView将不会显示一个+/,表示节点有子节点,直到您实际向其添加子节点。因此,在填充父节点时,应该检查逻辑项(数据行)是否有子节点,如果有,则添加一个虚拟节点。

    我发现从TreeNode继承自定义类是定义虚拟节点的最简单方法之一。然后可以在BeforeExpand()中使用Is运算符检查它。

    然后,当用户展开父节点时,在BeforeExpand事件中,检查是否存在虚拟节点,是否存在delete节点,然后填充实际节点。对于这些节点中的每一个,检查子节点,并根据需要填充标记属性和虚拟节点。

    将每个节点的标记属性设置为某种有意义的对象/数据。这将允许您在需要时轻松填充子节点。请注意,它是object类型的,需要时需要将其正确转换为实际的数据类型。

    推荐文章