我现在想实现的是点击Treeview节点以后Listview里显示所有子节点的最末一级节点的内容。
我的Treeview是这样的:
    +一号库(0001)
               +汽车件(101)
                     +汽车件一架(10101)
                          +汽车件一架一层(1010101)
                               +火花塞(101010101)      '物品1
                               +转向灯(101010102)      '物品2
                          +汽车件一架二层(1010102)
                               +刹车(101010201)        '物品3
                               +减震(101010202)        '物品4
                     +汽车件二架(10102)
                          +汽车件二架一层(1010201) 
                               +方向盘(101020101)      '物品5
                +小汽车件(102)
                     +小汽车件一架(10201)
                          +小汽车件一架一层(1020101)
                               +左转向(102010101)      '物品6
                               +右转向(102010102)      '物品7
                          +小汽车件一架二层(1020102)
                               +轮胎(102010201)        '物品8
                               +反光镜(102010202)      '物品9
            +小汽车件二架(10202)
                           +小汽车件二架一层(1020201)
                               +大风挡(102020101)      '物品10
         +二号库(0002)
         +三号库(0003)
         +四号库(0004)
我想实现:
点击 +一号库(0001)时Listview里显示 +火花塞(101010101)        '物品1
                                  +转向灯(101010102)        '物品2
                   +刹车(101010201)          '物品3
                                  +减震(101010202)          '物品4
                                     +方向盘(101020101)        '物品5
                                     +左转向(102010101)        '物品6
                                     +右转向(102010102)        '物品7
                                     +轮胎(102010201)          '物品8
                                     +反光镜(102010202)        '物品9
                                     +大风挡(102020101)        '物品10
点击+汽车件(101)时Listview里显示     +火花塞(101010101)        '物品1
                                  +转向灯(101010102)        '物品2
                   +刹车(101010201)          '物品3
                                  +减震(101010202)          '物品4
                                     +方向盘(101020101)        '物品5点击+汽车件一架(10101)时Listview显示 
                   +火花塞(101010101)       '物品1
                                   +转向灯(101010102)      '物品1
                   +刹车(101010201)         '物品1
                                   +减震(101010202)        '物品1点击+汽车件一架一层(1010101)时Listview显示
                                     +火花塞(101010101)        '物品1
                                     +转向灯(101010102)        '物品2 依此类推也就是显示:点击节点下面所有子节点的最末一级的节点内容.不知道我说得清楚吗?那位大哥帮帮忙呀!
只差一步了,不过比较难.以下代码能实现:点击Treeview节点以后Listview里显示相邻的所有子节点 
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
 Dim sTr As String
  Dim sql2 As String
  Dim sql As String
  Dim mylen As Integer
  Dim rs As New ADODB.Recordset
  sTr = Node.Key
  
  mylen = Len(sTr)
  sTr = Right(sTr, mylen - 1)
  sql2 = "select * from As_Inventory_Subject where CMatSortId='" & sTr & "'"
   rs.Open sql2, conn
   rs.MoveFirst
    Dim i As Integer
Do While Not (rs.EOF Or rs.BOF)
i = i + 1
lv1.ListItems.Add (i), , rs.Fields("CMatId") '科目编码lv1.ListItems(i).ListSubItems.Add , , rs.Fields("CMatName") '科目名称
lv1.ListItems(i).ListSubItems.Add , , rs.Fields("CInvStd") '规格
lv1.ListItems(i).ListSubItems.Add , , rs.Fields("CMUName") '单位
 
rs.MoveNext
    Loop  rs.Close
 
 
End Sub

解决方案 »

  1.   

    分两种情况
    1.treeview装载了所有节点的信息。对当前节点进行递归操作,找到叶子节点信息
    2.treeview没有装载当前节点子节点信息,则对数据库进行递归操作。天亮了再做个实验然后告诉你。
      

  2.   

    Option ExplicitPrivate Sub Form_Load()
    Dim sNode As Node
    With TreeView1
       Call TreeView1.Nodes.Add(, , "K0001", "一号库")
       Call TreeView1.Nodes.Add("K0001", tvwChild, "K000101", "122")
       Call TreeView1.Nodes.Add("K000101", tvwChild, "K00010101", "12201")
       Call TreeView1.Nodes.Add("K000101", tvwChild, "K00010102", "12202")
       Call TreeView1.Nodes.Add("K000101", tvwChild, "K00010103", "12203")
       Call TreeView1.Nodes.Add("K0001", tvwChild, "K000102", "133")
       Call TreeView1.Nodes.Add("K000102", tvwChild, "K00010201", "13301")
       Call TreeView1.Nodes.Add("K00010201", tvwChild, "K0001020101", "1330101")
    End With
    End SubPrivate Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
    If Node.Parent Is Nothing Then '点击第一层节点
       Call GetLastNode(Node)
    End If
    End SubPrivate Sub GetLastNode(sNod As Node)
    Dim sn As Node
       If sNod.Child Is Nothing Then
          List1.AddItem sNod.Text
          Set sn = sNod.Next
          Do While Not sn Is Nothing
             List1.AddItem sn.Text
             Set sn = sn.Next
          Loop
          If sNod.Parent.Next Is Nothing Then Exit Sub
          GetLastNode sNod.Parent.Next
       Else
          Set sNod = sNod.Child
          GetLastNode sNod
       End If
    End Sub
      

  3.   

    要点任意一层请把这个烊判断去掉
    If Node.Parent Is Nothing Then '点击第一层节点
      

  4.   

    treeview已经载了所有节点的信息。
      

  5.   

    treeview已经载了所有节点的信息。
    --------------------
    整个遍历就可以了:Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node)
    ListView1.ListItems.Clear
    Dim i As Integer, xnode As Node
    For i = 1 To TreeView1.Nodes.Count
    Set xnode = TreeView1.Nodes(i)
    If xnode.children = 0 And xnode.FullPath Like Node.FullPath & "*" Then ListView1.ListItems.Add , , xnode
    Next
    End Sub