我现在想实现的是点击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
我的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
解决方案 »
- vb 打包问题:access数据库
- 怎样 让鼠标划过一个图片让这个图片变大(突出显示)
- 如何判断输入的字符串格式是否是yyyy/mm/dd
- DATAGRID中如何回车下移到下一格?急急急!!!
- vb5 怎样为鼠标右键添加菜单,在线等待
- 放分999,请999位网友进来签名,为我MM祝福,3天以后她就要参加研究生入学考试了,谢谢
- 请教高手,如何在VB中屏蔽掉窗口右上角的关闭按钮?
- 请问怎样改变系统日期格式,如原默认为yy-MM-dd改为yyyy-MM-dd?
- 什么叫类不支持Automation,如何解决,急!!!
- 关于一个ACCESS97的查询的问题
- 我开发的软件使用以下的方法来操作数据库,不知怎么样?
- 用VB是否可以做拦截UDP的程序!?
1.treeview装载了所有节点的信息。对当前节点进行递归操作,找到叶子节点信息
2.treeview没有装载当前节点子节点信息,则对数据库进行递归操作。天亮了再做个实验然后告诉你。
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
If Node.Parent Is Nothing Then '点击第一层节点
--------------------
整个遍历就可以了: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