关于点击Treeview以后在Listview里显示的问题!不知道那位高手能帮我解决呀!100分不够可以再加!

zhllhzzhl 2005-11-05 11:15:03
我现在想实现的是点击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

...全文
243 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhllhzzhl 2005-11-07
  • 打赏
  • 举报
回复
狼行天下是高手,马上给分.
clear_zero 2005-11-05
  • 打赏
  • 举报
回复
分两种情况
1.treeview装载了所有节点的信息。对当前节点进行递归操作,找到叶子节点信息
2.treeview没有装载当前节点子节点信息,则对数据库进行递归操作。

天亮了再做个实验然后告诉你。
northwolves 2005-11-05
  • 打赏
  • 举报
回复
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
zhllhzzhl 2005-11-05
  • 打赏
  • 举报
回复
treeview已经载了所有节点的信息。
fishmans 2005-11-05
  • 打赏
  • 举报
回复
要点任意一层请把这个烊判断去掉
If Node.Parent Is Nothing Then '点击第一层节点

fishmans 2005-11-05
  • 打赏
  • 举报
回复
Option Explicit

Private 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 Sub

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
If Node.Parent Is Nothing Then '点击第一层节点
Call GetLastNode(Node)
End If
End Sub

Private 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

1,451

社区成员

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

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