AreaID QuickKey AreaName Memo
01 hb 华北
0101 bj 北京
0102 hb 河北
02 xb 西北
0201 sx 陕西
020101 xa 西安
02010101 hx 户县
02010102 caq 长安区
020102 xy 咸阳
02010201 qdq 秦都区
想用此表的数据添加到treeview中去,要求01,02是父节点,0101,0102是01的子节点,0201是02的子节点,020101,020102是0201的子节点.以此类推,全部添加到treeview中并显示出来AreaName字段中的内容,因为数据库中的数据不断变动,所以当程序运行时,是动态添加数据到treeview中的.学的不精,
请高手给予指点,十分感谢!!
01 hb 华北
0101 bj 北京
0102 hb 河北
02 xb 西北
0201 sx 陕西
020101 xa 西安
02010101 hx 户县
02010102 caq 长安区
020102 xy 咸阳
02010201 qdq 秦都区
想用此表的数据添加到treeview中去,要求01,02是父节点,0101,0102是01的子节点,0201是02的子节点,020101,020102是0201的子节点.以此类推,全部添加到treeview中并显示出来AreaName字段中的内容,因为数据库中的数据不断变动,所以当程序运行时,是动态添加数据到treeview中的.学的不精,
请高手给予指点,十分感谢!!
解决方案 »
- 有意在业余搞项目的朋友请进---->
- vb中如何实现擦玻璃的效果?
- 在2000server里没有form2.0 怎么加进来?
- 简单的很!!!
- 找字符串中空格位置
- 我想问问各位大虾啊
- ****datacombo用过吗?我知道如何用ado绑定,如果用代码如何设置?****
- vb 创建两个库表报错
- 请教大家,如何通过事件把文字插入到richedit当前的输入点?
- 我想做一个程序,他能够自动拨号,并且监视拨号过程,能知道拨号是否成功或失败,现在网上的拨号资料大都是启动拨号网络里的连接,再发送一个回车键,简直太低级了也不好控制,我想达到和网际快车软件的拨号功能一样,不知道调用什么函数?我在API里没找到?
- MSCOMM串口通讯问题
- 120急救!我想把计算机屏幕上显示的内容捕捉下来,然后通过Mscomm以byte形式发给51单片机!!
01,02设置为结点key
1.添加根节点 ,并设置假设子节点
tv.Nodes.Add , , "r", "Root" ‘key 设置为r
tv.Nodes.Add , , "d", "" 2.然后在tv_Expand函数中添加以后的
当tv expand的时候,删除当前所有节点的子节点(为了保证动态更新),然后添加点击
结点的子
节点 2.1如何删除当前节点的子节点
For i = Node.Children To 1 Step -1
tv.Nodes.Remove Node.Child.Index
Next i 2.2如何在数据库中寻找子节点
由于数字是不能作为key添加到tv中的,所以把数字前头加一个字符比如c.则子节点的
key变成了c01,c02.把真正的01,02...放在tag中
dim sTargetString as string Do Until Node.Key = "r"
sTargetString = sTargetString & Node.tag
Set Node = Node.Parent
Loop 此时sTargetString中为所寻找的根目录比如你寻找北京,此时sTargentString存放的
是01。 2.2根据sTargetString中内容,寻找下一级子节点
sTargetString=sTargetString & "%"
sql="select AreaID,AreaName from tb where ( AreaID=LIKE '" & sTargetString & "' and len(AreaID)=(len(sTargetString)+1))" rs.open sql,conn,1,1
选出即为下一级子节点 2.3添加进入当前节点
tv.Nodes.Add node.key, tvwchild, "c" & rs.fields(0), rs.fields(1) ‘key 设
置为r 2.4每添加一个结点都需要看一下是否还有孩子,如果有就添加一个虚拟结点在下面
dim sNewTarget as string
sNewTarget =sTargetString+rs.fields(0)
sql=...重复上面的查询,把sTargetString换成sNewTarget就好了。然后看新的
recordset.recordcount是否为0
Y:在新添加节点下add 虚拟结点 应该清楚了。自己做个实验
我这边试验通过了
Dim txtSQL As String
Dim MsgText As String
Dim rst As ADODB.Recordset
Dim nodX As Object txtSQL = "……"
Set rst = ExecuteSQL(txtSQL, MsgText) If Not rst.EOF Then
Do While Not rst.EOF
If rst("fdetail") = 0 Then
If Len(rst.Fields(0)) = 4 Then
Set nodX = TreeView1.Nodes.Add(, tvwChild, , , "book")
nodX.Key = "A" & rst.Fields(0)
nodX.Text = rst.Fields(0) & " " & rst.Fields(2)
Else
Set nodX = TreeView1.Nodes.Add(Left(("A" & rst.Fields(0)), 5), tvwChild, , , "man")
nodX.Key = "B" & rst.Fields(0)
nodX.Text = rst.Fields(0) & " " & rst.Fields(2)
End If
Else
If Len(rst.Fields(0)) = 9 Then
Set nodX = TreeView1.Nodes.Add(Left(("B" & rst.Fields(0)), 7), tvwChild, , , "mirror")
nodX.Key = "C" & rst.Fields(0)
nodX.Text = rst.Fields(0) & " " & rst.Fields(2)
End If
End If
' nodX.EnsureVisible
rst.MoveNext
Loop
End If
End Sub
这是我以前练习的一个小程序,不过功能只是把数据库中的数据显示在TreeView中,
rst.Fields(0) 为代码,如你的 01、0101等,rst.Fields(2) 为名称,
上下级节点的关系都是通过代码的长度来确定的;动态添加节点数据的功能,参考上面 MM 的作法……