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+Access---有点疑惑!
- VB中如何用实现计算向ORACLE中上传2000条2MB的数据的时间?
- vb打开*.hlp出错?谢谢
- 关于Wise Installation System 9.02打包安装的问题~~~
- 国庆期间仍在努力工作的同志們===大家一起來灌水啊~~
- datagrid请求
- ActiveX控件的一个问题
- 如何获得其它窗口(或是桌面)的一点的颜色? (下面代码为何不行)
- 对不起,我刚才说错了,问题是这个样子的....
- 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 的作法……