大家都帮我看看,我猜测是用递归,但没有头绪,一写就写不下去了!!

kurtcobain 2001-11-29 09:28:37
数据表结构如下:
名字 父节点的id 第几层 是否有子节点(0:没有 1:有)
id name parent levels haschild
2 中国移动 0 0 1
3 综合管理部 2 1 1
4 计划处 3 2 1
5 赵丹 4 3 0
6 张明 4 3 0
。。。。。
18 人事管理部 2 1 1
。。。。。。
#################################################
我要做的是在form_load时,把表里的数据全部取出,加入treeview1控件供选择用户
可是levels究竟有多少层,无法确定,这棵树的字节点的个数是无法确定的
我应该怎吗写?我猜测是用递归,可是写不出来麻烦各位大哥帮帮我
谢谢了!!
...全文
262 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
jett 2002-01-24
  • 打赏
  • 举报
回复
'烦傻了,不应该这么做,这样好点
Private Sub Combo1_Change()
rsresource.open "select id,name,parent from table order by levels", cn
TreeView1.Nodes.Clear
Call TreeView1.Nodes.Add(, , Combo1.Text, Combo1.Text)
Do Until rsresource.EOF
If rsresource("id") = 0 Then GoTo here
On Error GoTo here

Call TreeView.Nodes.Add(rsresource("parent"), tvwChild, rsresource("id"), rsresource("NAME"))
here:
rsresource.movenext
Loop

End Sub
'提醒一下node的key值不能是全数字,你附加点字符串什么的
jett 2002-01-24
  • 打赏
  • 举报
回复
比较差的办法是
把所有纪录先倒到一个treeview里然后把所有子节点
复制到另一个treeview
jett 2002-01-24
  • 打赏
  • 举报
回复
你这种表结构用sql是干不了的,至少我不会
这是如何获得Treeview一个Node下所有的子节
Dim yournode As Node
Dim aa As Node
Dim xx
Dim strtofind As String
strtofind = yournode.Key
TreeView1.PathSeparator = "/"
For Each aa In TreeView1.Nodes
If aa.Key = yournode.Key Then GoTo here 'do not want to include yournode
xx = Split(aa.FullPath, "/")
For i = 0 To UBound(xx)
If xx(i) = strtofind Then 'is child node

Next
here:
Next
lance 2002-01-24
  • 打赏
  • 举报
回复
gzgz
cqhydz 2002-01-24
  • 打赏
  • 举报
回复
极度关注
hongtao924 2002-01-24
  • 打赏
  • 举报
回复
关注
kurtcobain 2002-01-24
  • 打赏
  • 举报
回复
别easy呀???将明白
ferrytang 2002-01-24
  • 打赏
  • 举报
回复
简单的!
kurtcobain 2002-01-24
  • 打赏
  • 举报
回复
葡萄兄,小弟现在已经搞定了(一次把表里的所有数据取出来放入treeview),可那个变态客户要求又变了,要求在treeview控件上面先有一个combo控件来显示一级的节点,改变combobox时,treeview显示相对应的所有子节点,可我怎吗也想不出怎吗用sql语句取出在id=n节点下面的所有子节点
kurtcobain 2002-01-24
  • 打赏
  • 举报
回复
救我啊!!!!!
kurtcobain 2002-01-24
  • 打赏
  • 举报
回复
葡萄兄,小弟现在已经搞定了(一次把表里的所有数据取出来放入treeview),可那个变态客户要求又变了,要求在treeview控件上面先有一个combo控件来显示一级的节点,改变combobox时,treeview显示相对应的所有子节点,可我怎吗也想不出怎吗用sql语句取出在id=n节点下面的所有子节点
rushing 2002-01-20
  • 打赏
  • 举报
回复
应该先确定根结点,
每增加一层,计数器就加一;或者调用递归程序,生成下一级子结点。
daryl715 2002-01-20
  • 打赏
  • 举报
回复
fooloshtiger,fraser01
你们都来了啊,好
ljren_t 2002-01-20
  • 打赏
  • 举报
回复
两个循环搞定:
(1).把所有的项都加为无父结点的nodes
(2).给所有有父结点的nodes找到父亲.
Amoon 2002-01-20
  • 打赏
  • 举报
回复
呵呵,老吴啊,耐不住寂寞又回来了?
jett 2002-01-20
  • 打赏
  • 举报
回复
上面的foolishtiger(吴文智)所写的代码实际上和我的一样,不过他对字符串做了些处理,通用性更强一点
jett 2002-01-20
  • 打赏
  • 举报
回复
treeview1.node.add不需要知道是几级的,只要知道上一级是谁并且存在就可以插了
所以先用level排个序就可以一级级的插,遍历一次recordset即可
jett 2002-01-20
  • 打赏
  • 举报
回复
这是代码
rsresource.open "select id,name,parent from table order by levels" ,cn

do until rsresource.eof
if rsresource("parent")=0 then
treeview.nodes.add(,,rsresource("id"),rsresource("NAME"))
else
treeview.nodes.add(rsresource(“parent”),tvwchild,rsresource("id"),rsresource("NAME"))
end if
rsresource.movenext
loop
kurtcobain 2002-01-20
  • 打赏
  • 举报
回复
葡萄大哥,你就给我将个明白吧,好吗?我看的头大!!!
kurtcobain 2002-01-20
  • 打赏
  • 举报
回复
还是各说各的,
加载更多回复(12)

7,771

社区成员

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

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