你还纠结这个问题呢啊,记得我跟你说的写在treeview_expand里面解决不知道你执行了没有

解决方案 »

  1.   

    算啦,再帮你一次啦。首先表 用下面这个啦,实现你的需求肯定冇问题的啦
    id                    bm                                          upid
    1                  广东省                                       0
    2                  广西壮族自治区                       0
    3                  佛山市                                       1
    4                  桂林市                                       2
    5                 顺德区                                        3
    id字段是自增型,upid 整型,upid=0表示是根,非0表示上级的id。首先在Form_Load里面加载第一层节点Private Sub Form_Load()
       …………
        Dim xNode As Node
        
        '初始化一个顶级祖宗龟节点
        Set xNode = TreeView1.Nodes.Add
        xNode.Text = "龟"
        xNode.Key = "龟"
        Set xNode = Nothing
        
        '查一级节点
        Set rs = New ADODB.Recordset
        rs.Open "select * from 表 where upid=0", conn, adOpenKeyset, adLockReadOnly
        
        While Not rs.EOF
            '显然这里添加的是龟儿子节点咯
            Set xNode = TreeView1.Nodes.Add("龟", tvwChild)
            xNode.Text = rs.Fields("bm")
            xNode.Key = "n" & rs.Fields("id")
            Set xNode = Nothing
            
            '检查一下是否有龟孙子节点,如果有龟孙子节点,别管龟孙子是谁添加一个临时节点先,目的当然是显示龟儿子前面的+号咯
            Set rs1 = New ADODB.Recordset
            rs1.Open "select count(1) as c from 表 where upid=" & rs.Fields("id") , conn, adOpenKeyset, adLockReadOnly
            If rs1.Fields(0) <> 0 Then
                Set xNode = TreeView1.Nodes.Add("n" & rs.Fields("id"), tvwChild)
                xNode.Text = "子节点"
                xNode.Key = "n" & rs.Fields("id") & "tmp"
            End If
            Set rs1 = Nothing
            
            rs.MoveNext
        Wend
        rs.Close
        
        Set rs = Nothing
    End Sub再然后就是在treeview_expand事件里面把真的龟孙子纠出来,把冒牌的龟孙子干掉
    Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node)
        '检查一下点的是不是龟祖宗,如果点击的不是龟后代就不处理
        If Node.Key = "龟" Then Exit Sub
        
        Dim xNode As Node
        
        '先把冒充龟孙子的临时节点删掉
        TreeView1.Nodes.Remove (Node.Key & "tmp")    '查询真正的龟孙子节点
        Set rs = New ADODB.Recordset
        rs.Open "select * from 表 where upid=" & Replace(Node.Key, "n", ""), conn, adOpenKeyset, adLockReadOnly
        While Not rs.EOF
            Set xNode = TreeView1.Nodes.Add(Node.Key, tvwChild)
            xNode.Text = rs.Fields("bm")
            xNode.Key = "n" & rs.Fields("id")
            Set xNode = Nothing
            
            '检查一下龟孙子还有没有儿子,有的话再加个临时节点,目的当然也是为了前面的+号咯
            Set rs1 = New ADODB.Recordset
            rs1.Open "select count(1) as c from 表 where upid=" & rs.Fields("id") , conn, adOpenKeyset, adLockReadOnly
            If rs1.Fields(0) <> 0 Then
                Set xNode = TreeView1.Nodes.Add("n" & rs.Fields("id"), tvwChild)
                xNode.Text = "子节点"
                xNode.Key = "n" & rs.Fields("id") & "tmp"
            End If
            Set rs1 = Nothing
            
            rs.MoveNext
        Wend
        rs.Close
        Set rs = Nothing
    End Sub系唔系好简单,其实大家老早就已经把思路给你的了
      

  2.   

    如果你一定要用这许多表来做的话,你可以看看你在http://bbs.csdn.net/topics/390875557这篇提问里面清零小妞给你的回复,人家已经在里面告诉你怎么处理Key的问题啦,剩下就是自己好好琢磨琢磨
      

  3.   

    天开了,加个else  exit for (如果第一轮找不到下一层的首个记录则不查找)搞定!这样就不会造成关键字不唯一的问题了.感谢clear_zero 和CityBird 之前的思路和方法,你们真是大众救星啊,编程界的领军英雄。一起来吧,国庆可以放大假啦!