请教!在TreeView中动态建立Tree的算法?最好有源程序

neatrain 2000-08-11 05:13:00
有一部门资料数据表,结构与数据如下:
部门编号(Bmxh) 上级编号(Sjbh) 部门名称(Bmmc)
001 集团总公司1
002 集团总公司2
003 001 音响事业部
004 001 印刷事业部
005 001 化工事业部
006 003 人事部
007 003 工程部
008 003 生产部
009 003 质检部
010 004 人事部
011 004 工程部
012 004 生产部
013 004 质检部
014 005 人事部
015 005 工程部
016 005 生产部
017 005 质检部
... ... ...

在实际使用当中层次要更多更复杂,设计的原意为N层结构。小弟需要用如下树形式来表示部门层次关系,但如何利用这些数据动态生成树足令我头痛了两天,那位大侠可指点指点生成该树的算法或实现思想(如有需要可更改表结构),小弟先行谢过了!
001 集团总公司1
and
+-----003 音响事业部
and and
and +------006 人事部
and +------007 工程部
and +------008 生产部
and +------009 质检部
and
and -----004 印刷事业部
and and
and +-----010 人事部
and +-----011 工程部
and +-----012 生产部
and +-----013 质检部
and
and -----005 化工事业部
and
+-----014 人事部
+-----015 工程部
+-----016 生产部
+-----017 质检部
002 集团总公司2
and
...
...全文
232 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dai0726 2000-09-05
  • 打赏
  • 举报
回复
要不你等几天,我编个出来,可惜不能有象TTable那样的 DatabaseName属性,问过人,但没有人懂!
dai0726 2000-09-05
  • 打赏
  • 举报
回复
不如去找个TDBTreeView组件来好的 多!
hhzh426 2000-09-03
  • 打赏
  • 举报
回复
你可以修改部门编号的方法,将分枝结构包含进去,象身份证号码一样
如:
比如有十级机构,第一级用2个字符(可以有100个集团00~99),第二级用2个字符(可以有100
个部门)...每一级用2个字符我想足够了,那么用20个字符表示部门编号,没有下级部门时相应
的编号用00表示。
01000000000000000000表示第一集团
01010000000000000000表示第一集团直属的第一部门
01010100000000000000表示第一集团第一部门下属的第一部门
...
数据读取出来时按编号排序,将部门编号分解到一个数组中去,并判断一下它的层次,在部门名称
前增加tab字符,增加的个数为层次-1,然后将新生成的字串写入一个strings中,每一个记录一
行,strings有savetostream和savetofile的方法,而treeview有loadfromstream和loadfromfile的方法,这样就可以一次性的给treeview的各个节点赋值,而不需要考虑节点层次
strings的内容可能如下{tab}表示一个TAB字符(用这种方法可以避免由于固定层次而带来的升
级困难)。
第一集团
第二集团
{tab}音响事业部
{tab}{tab}人事部
{tab}印刷事业部
{tab}{tab}人事部
...
用这种方法你不用担心会乱,因为你是按照编号进行排序的(?表示任意字符)
01?>=0101?
02>01?一点儿也不会乱,只是在运行过程中数据库发生变化时需要重新读取一下(记住要清除
TREEVIEW的所有节点)
如果结构层次增加了,可以用将以前的编号后增加00的方法增加一个层次

Slash 2000-09-01
  • 打赏
  • 举报
回复
我已经将此功能封装为控件,支持拖动操作,非常适合作为人事管理的用途,需要者可贴出mail来!
wxz 2000-08-12
  • 打赏
  • 举报
回复
Wingsun的方法可以,不过不详细,能不能给出数据库结构,我写程序给你
Wingsun 2000-08-11
  • 打赏
  • 举报
回复
如果要一次性建立该数型目录,填充所有的节点,比较慢。
第一层:Select * From Table Where sjbh is NULL Order by bmxh
然后以第一层为一个循环
Select * from Table Where sjbh =Code order by bmxh
如此下去直到该语句返回的结果集为空。
也可以在需要的时候再在展开他,例如在用户展开某一节点时再将其字节点填充进来,这样装载速度比较快。

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧