Office中国论坛/Access中国论坛

标题: 多父节点TreeView如何实现 [打印本页]

作者: LeeTien    时间: 2016-2-19 22:36
标题: 多父节点TreeView如何实现
论坛里TreeView的实例一搜一大把,最近有个项目要用到多父节点关系树。google了整个网络,竟然没有。坛子里有没有高人搞过,忘指点一二,不胜感激!

比如

父亲         母亲
   \            /
     \        /
       \    /
      小明

作者: roych    时间: 2016-2-20 09:15
这玩意儿好像应该属于图吧?
关于这么高级的数据结构,VB/VBA不好实现。
事实上,除了自带的数组、字典和集合之外,其它数据结构在VBA/VB里实现起来都不容易,往往需要写类模块。
作者: 风中漫步    时间: 2016-2-20 09:25
多些说明
treeview可能难以实现你的要求
作者: LeeTien    时间: 2016-2-20 09:36
貌似这样的结构不符合树的定义了,树只有一个根。而这样的定义会出现多个根,只能成为关系图吧。
作者: todaynew    时间: 2016-2-20 10:50
本帖最后由 todaynew 于 2016-2-20 11:04 编辑
LeeTien 发表于 2016-2-20 09:36
貌似这样的结构不符合树的定义了,树只有一个根。而这样的定义会出现多个根,只能成为关系图吧。

这就看你会不会转化问题或者问题能否被转化了。
1、诸如父母与子女的问题,可以转换为父子关系,其要点是将父母关系看成另外的一对一关系或一对多关系。
2、诸如独生子女问题,可以转化为逆的tree结构。
参见:http://www.office-cn.net/forum.p ... F%CF%C2%C7%F3%CB%F7
http://www.office-cn.net/forum.p ... A%C1%AC%BE%C5%D7%E5
3、多父对多子,实际上可以转换为多个一父对多子或一子对多父,所以只需要一个组合框控件与tree控件结合使用就能满足普遍的需要。

所以对于此类问题,首先不是解决它,而是转换它,使之符合已知的处理方法和逻辑。

作者: xinrenq    时间: 2016-2-23 09:10
看来LZ没有研究深入啊,父子关系,同时这个关系也是反向,
好比,一个产品,用了N种物料,但一种物料被N种产品使用,看。物料也可以是父项了
好比我们建好的表结构,一列放父项数据,一列放子项数据,你如果操作一上,把子项数据排序一下,如果不通过字段字面意思和标题名称的话,你肯定是分不出来,谁是父项谁是子项的,所以在应用中,PDM或MRP计算时,时常也用到这类算法,
你为什么网上没有搜到呢。是因为这个不是个问题,说起来是三个关系,但实质上,多对多,是由若干个一对多关系组合而成的,
所以一般数据库都 是一对一,一对多为主,最多加一个“没关系”,呵。。
作者: LeeTien    时间: 2016-2-24 08:42
本帖最后由 LeeTien 于 2016-2-24 08:47 编辑

楼上的大师可否做个实例:就以以下关系
PS:关键是要做展示,如果只是做逻辑关系那太简单了,请围绕主题!

父亲         母亲
   \            /
     \        /
       \    /
      小明
      /  |  \
    /    |    \
  /      |      \
/        |        \
长子 次子  长女












作者: todaynew    时间: 2016-3-8 13:35
本帖最后由 todaynew 于 2016-3-8 16:53 编辑
LeeTien 发表于 2016-2-24 08:42
楼上的大师可否做个实例:就以以下关系
PS:关键是要做展示,如果只是做逻辑关系那太简单了,请围绕主题! ...

这不是很简单嘛。
以小明为根节点,一个父辈tree加一个子辈tree。

            小明
           /      \
          /         \
       父辈         子辈
     /     \          /  |  \
   父亲    母亲 /   |    \
                     /    |      \
                    /     |        \
              长子    次子     长女

实现方法有两种:
第一种:两个treeview控件,第一个treeview控件按单父节点向下展开,第二个trueview在第一个treeview的节点单击事件中,将单击的节点做根,然后加载父辈和子辈节点。

第二种:用一个treeview控件,通过节点双击切换两种tree视图。

作者: LeeTien    时间: 2016-3-8 17:35
todaynew 发表于 2016-3-8 13:35
这不是很简单嘛。
以小明为根节点,一个父辈tree加一个子辈tree。

逻辑上没有问题,实际上做出来就很怪了,父辈变成了小明子节点,晚辈也是小明的子节点。
作者: LeeTien    时间: 2016-3-9 10:36
昨天找到一个老外的实例,思路不错,只是源码太长,目前正在改造。有兴趣的可以看看
http://www.office-cn.net/forum.php?mod=viewthread&tid=121478&page=1#pid741367

作者: shisir67    时间: 2018-8-13 22:52
有人解决了,多搜搜




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3