Node_ID and Parent_ID应该为多对一的关系吧?
用递归吧。sub Refresh_List 清空TreeView
寻找isroot=-1的记录,intNode=它的Node_ID,添加到TreeView。
AddN(intNode)end subsub AddN(byval intA as Integer)
dim bFound as Boolean
do
寻找Parent_ID=intA的记录,
if found then
bFound=True
intNodeTemp=它的Node_ID,添加到TreeView。
AddN(intNodeTemp)
else
bFound=False
endif
loop until not bFound
end sub
用递归吧。sub Refresh_List 清空TreeView
寻找isroot=-1的记录,intNode=它的Node_ID,添加到TreeView。
AddN(intNode)end subsub AddN(byval intA as Integer)
dim bFound as Boolean
do
寻找Parent_ID=intA的记录,
if found then
bFound=True
intNodeTemp=它的Node_ID,添加到TreeView。
AddN(intNodeTemp)
else
bFound=False
endif
loop until not bFound
end sub
Dim clt As New collenction
Dim cnn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim pt As IntegerPrivate Sub Command1_Click()
Dim record As String
Dim node_id As String
Dim nodename As String
Dim nodechildren As Long
Dim parentnode As String
Dim i%, j%, n%, k%
rs.MoveLast
rs.MoveFirst
pt = 1
node_id = rs.Fields("node_id")
Do While Not rs.EOF
If node_id = rs.Fields("parent_id") Then
clt.Add rs.Fields("nodename")
j = j + 1
Call children(node_id, j)
End If
If pt < rs.RecordCount Then
pt = pt + 1
rs.MoveNext
Else
Exit Do
End If
Loop
For Each clt In clt.Count
Text1.Text = Text1.Text & clt.Item(i)
Next
End Sub
Private Sub children(node_id As String, j%)
Dim i%, k%
Dim a$, b$, C$
Set clt = New Collection
rs.MoveFirst
pt = 1
Do While Not rs.EOF
If node_id = rs.Fields("parent_id") Then
node_id = rs.Fields("node_id")
j = j + 1
clt.Add rs.Fields("nodename")
Call children(node_id, j)
pt = 1
rs.MoveFirst
Else
End If
pt = pt + 1
rs.MoveNext
Loop
clt.Add rs.Fields("nodename")
End SubPrivate Sub Form_Load()
Set cnn = New ADODB.Connection
Set cmd = New ADODB.Command
Set rs = New ADODB.Recordset
cnn.Open "provider=microsoft.jet.oledb.4.0;data source=c:\my documents\nodetest.mdb"
With rs
.ActiveConnection = cnn
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open "select * from tbl_node"
End With
Set clt = New Collection
End Sub
Private Sub children(node_id As Integer, intParent as Integer)dim Child_id as Integer
dim tvItem as Node
dim rst=new adodb.Recordset
rst.open "select * from .. where "parent_id=" & node_id, ......
rst.movefirst
Do While Not rs.EOF
Child_id = rst.Fields("node_id")
set tvItem=tvXXX.Add(rst.Fields("nodename"),tvwchild,intParent)
'我记不清Add的参数了
'intParent指明父节点
Call children(Child_id, tvItem.Index)
set tvitem=nothing
rst.movenext
Loop
set rst=nothingEnd Sub
更正为
rst.open "select * from .. where parent_id=" & node_id, ......
两位能把代码写全点么?
这是我的一个应聘试题。多谢!
他们还要求要做一个集合类,接口信息:
1.levelnode
node_id
nodename
nodechildren
parentnode
2.levelnode
count
item
add([relatekey as string],[objlevelnode as levelnode],[skey as string]) as levelnode (方法 增加)
参数说明:
Relatekey 上级对象在集合中的KEY
objlevelnode 要加入集合的对象
SKEY 在集合中的KEY
Node_ID NodeName IsRoot Parent_ID
1 aaa -1
2 bbb 0 1
3 ccc 0 1
4 ddd 0 2
5 eee -1
6 fff 0 3
7 ggg 0 6
8 hhh 0 5
9 jjj 0 7
...
...
rs.Open "select * from T where IsRoot=-1",.......
if rs.eof then exit sub
rs.MoveFirst
do while not rs.eof
set lt= new LevelNode
lt.node_id=rs!node_id
lt.nodename=rs!node_name
lt.parentnode=-1
clt.Add -1, lt, lt.Node_ID
children lt.node_id
rs.movenext
loop
end sub
Private Sub children(node_id As Integer)dim Child_id as Integer
dim TempNode as LevelNode
dim rst=new adodb.Recordsetrst.open "select * from .. where parent_id=" & node_id, ......
if rst.eof then exit sub
rst.movefirst
Do While Not rs.EOF
Child_id = rst.Fields("node_id")
set TempNode= new LevelNode
TempNode.node_id=rs!node_id
TempNode.nodename=rs!node_name
TempNode.parentnode=node_id
clt.Add(node_id, TempNode, TempNode.Node_id)
children TempNode.Node_id
rst.movenext
Loop
set rst=nothingEnd Sub