我想做一个TREEVIEW,其中的节点要从数据库里读取。例如这样一个节点:
+a
-ab
-ac
+b
-bb
-bc
+c
-cb
-ca
数据库里有两张表分别存储父节点a、b、c
另一张存储 -ab
-ac
……
现在出现一点问题,希望能帮我写出上面例子的代码。在线等……分全送!!!!!!
在存放子节点的表中增加一个标识符来对应其父节点。
dbstr = "select * from 子表"
Myrec = Mydb.OpenRecordset(dbstr, DAO.RecordsetTypeEnum.dbOpenDynaset)
Myrec.MoveFirst()
While Myrec.EOF = False
Select Case myrec.fields(0).tostring
case "+a"
x=myrec.fields(1).tostring -ab
y=myrec.fields(2).tostring -ac
case "+b"
.....
case "+c"
.....
然后再输出myrec.fields(0).tostring,x,y
Table1和Table2是一对多的关系,Table2通过NodeId字段和Table1关联
表结构: Table1: NodeID,NodeCaption
Table2: NodeID,SubNodeCaption
Private Sub Command1_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset, rs1 As New ADODB.Recordset
Dim nd As Node
Dim i As Single
Dim strKey As String
TreeView1.Nodes.Clear
cn.ConnectionString = "Driver={SQL Server};Server=Develop;Uid=sa;Pwd=;Database=Test"
cn.Open
Set rs = cn.Execute("select NodeID,NodeCaption from table1 order by NodeID")
Do While Not rs.EOF
父节点
i = i + 1
strKey = "N" & i
Set Node = TreeView1.Nodes.Add(, , strKey, rs("NodeCaption").Value)
子节点
Set rs1 = cn.Execute("select SubNodeCaption from table2 " & _
"where NodeID=" & rs("NodeID").Value & " " & _
"order by SubNodeCaption")
Do While Not rs1.EOF
Set Node = TreeView1.Nodes.Add(strKey, tvwChild, , rs1("SubNodeCaption").Value)
rs1.MoveNext
Loop
rs1.Close
TreeView1.Nodes(strKey).Expanded = True
rs.MoveNext
Loop
rs.Close
cn.Close
Set rs = Nothing
Set rs1 = Nothing
Set cn = Nothing
End Sub
E-Mail:hope781220@sina.com.cn
比如有个表会计的科目代码的
1 资产类
11 现金
111 人民币
112 美金
113 欧元
12 银行
2 ......
21 .....
22 .....
.............
TreeView1.Nodes.Clear
Dim Mnode As Node, RootLen%
Dim r As New ADODB.Recordset
r.Open "select * from kjkm order by kmdm", Cn
If Not r.EOF Then
RootLen = Len(Trim(r!kmdm))
End If
If Len(Trim(r!kmdm)) = RootLen Then
Set Mnode = TreeView1.Nodes.Add()
Mnode.Text = Trim(r!kmdm) & Space(2) & Trim(r!kmmc)
Mnode.Key = "R" & Trim(r!kmdm)
Mnode.Image = 3
Mnode.ExpandedImage = 1
Else
On Error Resume Next
Err = 0
Set Mnode = TreeView1.Nodes.Add("R" & Left(Trim(r!kmdm), Len(r!kmdm) - 1), 4)
If Err Then
Set Mnode = TreeView1.Nodes.Add("R" & Left(Trim(r!kmdm), Len(r!kmdm) - 2), 4)
End If
On Error GoTo 0
Mnode.Text = Trim(r!kmdm) & Space(2) & Trim(r!kmmc)
Mnode.Key = "R" & Trim(r!kmdm)
Mnode.Image = 3
Mnode.ExpandedImage = 1
mNode.Selected = True
On Error Resume Next
Err = 0
TreeView1.Nodes("R" & Left(Trim(r!kmdm), Len(r!kmdm) - 1)).Image = 2
If Err Then
TreeView1.Nodes("R" & Left(Trim(r!kmdm), Len(r!kmdm) - 2)).Image = 2
End If
On Error GoTo 0
End If
。。。。。。
同意_1_(www.jinesc.com) 。
建议用一张表来实现
利用TreeView.Nodes.Add relative, relationship, Key, Text, Image, SelectedImage这句语句的参数来建表结构
ACCESS又怎么了??? 我那代码在ACCESS下运行没有发现有不对的地方???
象这个简单的东西用ACCESS和SQL SERVER不也是一样的吗?
回复junwhj:
你的代码效率太低,可以这样修改:
Set rs = cn.Execute("select NodeID,NodeCaption from table1 order by NodeID")
Do While Not rs.EOF
父节点
strKey = "N" & rs("Nodeid").Value
TreeView1.Nodes.Add(, , strKey, rs("NodeCaption").Value)
rs.MoveNext
Loop
Set rs1 = cn.Execute("select NodeID,SubNodeCaption from table2 order by SubNodeCaption")
Do While Not rs1.EOF
i = i + 1
TreeView1.Nodes.Add("N" & rs("Nodeid").Value, tvwChild,"SubN" & rs("Nodeid").Value & i , rs1("SubNodeCaption").Value)
rs1.MoveNext
Loop
rs1.Close