有个数据表: 房间信息表
里面有字段:Nodeid,id
表中内容有:ss,1
          ss,2
          ss,3
          ss,4
          ss,5
          ss,6
          qq,1
          qq,2
          qq,3
          qq,4
          qq,5
          qq,6
我现在想实现这个样子的树状结构:温度监控管理系统(主树)
ss(第一棵树)
1(第二棵树)
2(第二棵树)
3(第二棵树)
4(第二棵树)
5(第二棵树)
6(第二棵树)
qq(第一棵树)
1(第二棵树)
2(第二棵树)
3(第二棵树)
4(第二棵树)
5(第二棵树)
6(第二棵树)
现程序是:
 NodeKey = "温度监控管理系统"
 NodeText = "温度监控管理系统"
Set Node1 = TreeView1.Nodes.Add(, , NodeKey, NodeText, 0)
     SQLStr = "select  distinct nodeid,id from 房间信息表 "
     Set rs = ESQL(SQLStr)
     
       If rs.RecordCount > 0 Then
           rs.MoveFirst
             Do While Not rs.EOF
                NodeKey = Trim(rs!nodeid)
                NodeText = rs!nodeid
                Set Node2 = TreeView1.Nodes.Add(Node1.Index, tvwChild, NodeKey, NodeText, 0)
                 SQLStr1 = "select  distinct nodeid,id from 房间信息表 where id=" & rs.Fields("id")
                 Set rs1 = ESQL(SQLStr1)
                    If rs1.RecordCount > 0 Then
                       rs1.MoveFirst
                      Do While Not rs1.EOF
                            NodeKey = Trim(rs1!ID)
                            NodeText = rs1!ID
                            Set Node3 = TreeView1.Nodes.Add(Node2.Index, tvwChild, NodeKey, NodeText, 0)
                        rs1.MoveNext
                      Loop
                     End If
                 rs.MoveNext
             Loop
    End If望各位帮个忙,祝大家新年快乐
                           

解决方案 »

  1.   

    现在treeview中只出现
    温度监控管理系统
    .....ss
    然后就没了
      

  2.   

    怎么没人??
    Set Node1 = TreeView1.Nodes.Add(, , NodeKey, NodeText, 0)
         SQLStr = "select  distinct nodeid from 房间信息表 "
         Set rs = ESQL(SQLStr)       If rs.RecordCount > 0 Then
               rs.MoveFirst
                 Do While Not rs.EOF
                    NodeKey = Trim(rs!nodeid)
                    NodeText = rs!nodeid
                    Set Node2 = TreeView1.Nodes.Add(Node1.Index, tvwChild, "nodeid" & NodeKey, NodeText, 0)                 rs.MoveNext
                 Loop
        End If
    这些能得到主树和第一棵树:
    温度监控管理系统(主树) 
    ss(第一棵树) 
    qq(第一棵树)
      

  3.   

    Set Node1 = TreeView1.Nodes.Add(, , NodeKey, NodeText, 0)
         SQLStr = "select  distinct nodeid from 房间信息表 "
         Set rs = ESQL(SQLStr)       If rs.RecordCount > 0 Then
               rs.MoveFirst
                 Do While Not rs.EOF
                    NodeKey = Trim(rs!nodeid)
                    NodeText = Trim(rs!nodeid)
                    Set Node2 = TreeView1.Nodes.Add(Node1.Index, tvwChild, "nodeid" & NodeKey, NodeText, 0)
                     SQLStr1 = "select   nodeid,id from 房间信息表 " '''where nodeid=" & rs.Fields("nodeid")
                     Set rs1 = ESQL(SQLStr1)
                        If rs1.RecordCount > 0 Then
                           rs1.MoveFirst
                          Do While Not rs1.EOF
                             If Trim(rs1!nodeid) = Trim(rs!nodeid) Then
                                NodeKey = Trim(rs1!ID)
                                NodeText = Trim(rs1!ID)
                                Set Node3 = TreeView1.Nodes.Add(Node2.Index, tvwChild, "id" & NodeKey, NodeText, 0)
                              End If
                            rs1.MoveNext
                          Loop
                         End If
                     rs.MoveNext
                 Loop
        End If
    现在能出现:
    温度监控管理系统(主树)   
    ss(第一棵树)
    。1  
    。2
    。3
    。4
    。5
    。6 
    qq(第一棵树) 
    这个树没出来
      

  4.   

    CSDN那CSDN怎么连支一声的人都没有哎
      

  5.   

    问题出在rs的第一次循环中rs1的所有循环已经完成,但是rs有二次循环
    就是想不到解决方案
      

  6.   

    以下为添加目录树的源码,希望对你有帮助:
    '添加下一级
    Private Sub cmdChild_Click()
        Dim oNodex As Node
        Dim skey As String
        Dim iIndex As Integer
            lb = ""
        iIndex = TreeView1.SelectedItem.Index 'Check to see if a Node is selected
        skey = GetNextKey() ' Get a key for the new Node
        frmlb.Show vbModal
        If lb & "" = "" Then
            Exit Sub
        Else
            Set oNodex = TreeView1.Nodes.Add(iIndex, tvwChild, skey, lb, 1, 2)
            cmdSave.Enabled = True
            Exit Sub
        End If
    End Sub'添加同一级
    Private Sub cmdFirst_Click()
        Dim skey As String
        Dim iIndex As Integer
        lb = ""
    If addnode = "物品分类" Then
        MsgBox "对不起!不能再次添加根目录!"
        Exit Sub
    Else
        iIndex = TreeView1.SelectedItem.Index 'Check to see if a Node is selected
        skey = GetNextKey() ' Get a key for the new Node
    End If
        frmlb.Show vbModal
        If lb & "" = "" Then
        Else
        TreeView1.Nodes.Add iIndex, tvwLast, skey, lb, 1, 2
        cmdSave.Enabled = True
        Exit Sub
        End If
    End Sub
    Private Sub GetFirstParent()
    'Find the first parent node in the TreeView
        On Error GoTo myerr
        Dim i As Integer
        Dim nTmp As Integer
        
        For i = 1 To TreeView1.Nodes.Count
            'This will give an error if there is no parent
            nTmp = TreeView1.Nodes(i).Parent.Index
        Next
        Exit Sub
        
    myerr:
        mnIndex = i
        Exit Sub
    End SubPrivate Function GetNextKey() As String
    'Returns a new key value for each Node being added to the TreeView
    'This algorithm is very simple and will limit you to adding a total of 999 nodes
    'Each node needs a unique key. If you allow users to remove Nodes you can't use
    'the Nodes count +1 as the key for a new node.    Dim sNewKey As String
        Dim iHold As Integer
        Dim i As Integer
        On Error GoTo myerr
        'The next line will return error #35600 if there are no Nodes in the TreeView
        iHold = Val(TreeView1.Nodes(1).Key)
        For i = 1 To TreeView1.Nodes.Count
            If Val(TreeView1.Nodes(i).Key) > iHold Then
                iHold = Val(TreeView1.Nodes(i).Key)
            End If
        Next
        iHold = iHold + 1
        sNewKey = CStr(iHold) & "_"
        GetNextKey = sNewKey 'Return a unique key
        Exit Function
    myerr:
        'Because the TreeView is empty return a 1 for the key of the first Node
        GetNextKey = "1_"
        Exit Function
    End Function
    Private Sub showtree()
    'asks the user to find the database and then restores the Nodes
    'in the treeview control from the table
        Dim oNodex As Node
        Dim nImage As Integer
        Dim nSelectedImage As Integer
        Dim sTableNames As String
        'Set mDB = DBEngine.Workspaces(0).OpenDatabase(App.Path & "\cx.mdb", False, False, ";pwd=nbmidt920")
        TreeView1.Nodes.Clear 'Clear the TreeView of any nodes
        'Set mRS = mDB.OpenRecordset("splb")
        rs.Open "select * from splb", cn, adOpenStatic, adLockOptimistic
        If rs.RecordCount > 0 Then 'make sure there are records in the table
            rs.MoveFirst
            Do While rs.EOF = False
                nImage = rs.Fields("image")
                nSelectedImage = rs.Fields("selectedimage")
                If Trim(rs.Fields("parent")) = "0_" Then 'All root nodes have 0_ in the parent field
                    Set oNodex = TreeView1.Nodes.Add(, 1, Trim(rs.Fields("key")), _
                    Trim(rs.Fields("text")), nImage, nSelectedImage)
                Else 'All child nodes will have the parent key stored in the parent field
                    Set oNodex = TreeView1.Nodes.Add(Trim(rs.Fields("parent")), tvwChild, _
                       Trim(rs.Fields("key")), Trim(rs.Fields("text")), nImage, nSelectedImage)
                         'expend the TreeView so all nodes are visible
                End If
                rs.MoveNext
            Loop
        End If
        TreeView1.Nodes.Item(1).Expanded = True
        rs.Close 'Close the table
        'mDB.Close 'Close the database
    End Sub
    Sub SaveToTable()
        Dim sResponse As String
        Dim sMDBName As String
        Dim sTableName As String
        Dim i As Integer
        Set mRS = New ADODB.Recordset
        mRS.Open "select * from splb", cn, adOpenStatic, adLockOptimistic
            WriteToTable  'Go to the sub that writes the nodes into the table
        mRS.Close 'close the recordset
    End SubPrivate Sub cmdok_Click()
    If addnode = "物品分类" Or addnode = "" Then
        MsgBox "请选择物品分类信息!"
    Else
        lb = addnode
        Unload Me
    End If
    End Sub'删除所选类别
    Private Sub cmdRemove_Click()
        Dim iIndex As Integer
    If addnode = "物品分类" Then
        MsgBox "无法删除当前选定分类!"
    Else
        If MsgBox("确定要删除当前选定分类吗?", 36) = 6 Then
            iIndex = TreeView1.SelectedItem.Index 'Check to see if a Node is selected
            TreeView1.Nodes.Remove iIndex 'Removes the Node and any children it has
            SaveToTable
        End If
    End If
    End Sub
    '保存
    Private Sub cmdSave_Click()
    Call SaveToTable
    End Sub
    Sub WriteToTable()
        Dim iTmp As Integer
        Dim iIndex As Integer
        If mRS.RecordCount > 0 Then
            mRS.MoveFirst
            Do While mRS.EOF = False
                mRS.Delete
                mRS.MoveNext
            Loop
        End If
        GetFirstParent 'Find a root node in the treeview
        'get the index of the root node that is at the top of the treeview
        iIndex = TreeView1.Nodes(mnIndex).FirstSibling.Index
        iTmp = iIndex
        mRS.AddNew
        mRS("parent") = "0_" 'this is a root node
        mRS("key") = TreeView1.Nodes(iIndex).Key
        mRS("text") = TreeView1.Nodes(iIndex).Text
        mRS("image") = TreeView1.Nodes(iIndex).Image
        mRS("selectedimage") = TreeView1.Nodes(iIndex).SelectedImage
        mRS.Update
        'If the Node has Children call the sub that writes the children
        If TreeView1.Nodes(iIndex).Children > 0 Then
            WriteChild iIndex
        End If
        
        While iIndex <> TreeView1.Nodes(iTmp).LastSibling.Index
        'loop through all the root nodes
            mRS.AddNew
            mRS("parent") = "0_" 'this is a root node
            mRS("key") = TreeView1.Nodes(iIndex).Next.Key
            mRS("text") = TreeView1.Nodes(iIndex).Next.Text
            mRS("image") = TreeView1.Nodes(iIndex).Next.Image
            mRS("selectedimage") = TreeView1.Nodes(iIndex).Next.SelectedImage
            mRS.Update
             'If the Node has Children call the sub that writes the children
            If TreeView1.Nodes(iIndex).Next.Children > 0 Then
                WriteChild TreeView1.Nodes(iIndex).Next.Index
            End If
            ' Move to the Next root Node
            iIndex = TreeView1.Nodes(iIndex).Next.Index
        Wend
        cmdSave.Enabled = False
    End Sub
    '-------------------------------------
    Private Sub WriteChild(ByVal iNodeIndex As Integer)
        Dim iTempIndex As Integer
        iTempIndex = TreeView1.Nodes(iNodeIndex).Child.FirstSibling.Index
        For i = 1 To TreeView1.Nodes(iNodeIndex).Children
            mRS.AddNew----
            mRS("parent") = TreeView1.Nodes(iTempIndex).Parent.Key
            mRS("key") = TreeView1.Nodes(iTempIndex).Key
            mRS("text") = TreeView1.Nodes(iTempIndex).Text
            mRS("image") = TreeView1.Nodes(iTempIndex).Image
            mRS("selectedimage") = TreeView1.Nodes(iTempIndex).SelectedImage
            mRS.Update
            If TreeView1.Nodes(iTempIndex).Children > 0 Then
                WriteChild (iTempIndex)
            End If
            If i <> TreeView1.Nodes(iNodeIndex).Children Then
                iTempIndex = TreeView1.Nodes(iTempIndex).Next.Index
            End If
        Next i
    End Sub