然后就可以在 Add 方法中使用该变量了,Add 方法需要用来加入子节点的 Node 对象的 Index 属性:
Set mNode = tvwDB.Nodes.Add(intIndex, tvwChild)
如下简化的代码可被表述为“直到 Recordset 的结尾:创建子 Node 对象,并将 Title 字段的值赋给它的 Text 属性;移动到下一记录并重复上述操作”:
Do Until rsTitles.EOF
If rsPublishers!PubID = rsTitles!PubID Then
Set mNode = tvwDB.Nodes.Add(intIndex, tvwChild)
mNode.Text = rsTitles!Title 'Text 属性。
End If
Loop
完成代码
上面的代码显示了用两个相关的表填成一个表的基本策略。全部代码如下:
'必须设置对 DAO 3.5 的引用。
'在声明部分,声明模块级的对象变量:
Private mDbBiblio As Database
Private mNode As Node
Set mDbBiblio = DBEngine.Workspaces(0). _
OpenDatabase("BIBLIO.MDB")
tvwDB.Sorted = True
Set mNode = tvwDB.Nodes.Add()
mNode.Text = "Publishers"
mNode.Tag = mDbBiblio.Name '设置 Tag 属性。
mNode.Image = "closed" '设置 Image
'属性
End Sub
Private Sub cmdLoad_Click()
'声明 DAO 对象变量,
'并将记录集赋予它们。
Dim rsPublishers As Recordset
Dim rsTitles As Recordset
Set rsPublishers = mDbBiblio. _
OpenRecordset("Publishers", dbOpenDynaset)
Set rsTitles = mDbBiblio. _
OpenRecordset("titles", dbOpenDynaset)
'移到第一条记录。
rsPublishers.MoveFirst
Dim intIndex As Integer '用于索引的变量。
'直到最后一条记录 (EOF):添加一个 Node 对象,
'并用 Name 字段作为新
'Node 对象的文本。
Do Until rsPublishers.EOF
Set mNode = tvwDB.Nodes.Add(1, tvwChild)
mNode.Text = rsPublishers!Name
mNode.Tag = "Publisher" 'Tag 标识该表。
'为 Key 赋予唯一的 ID
mNode.Key = CInt(rsPublishers!PubID) & " ID"
'将变量 intIndex 设置为新创建 Node 的 Index 属性。
'用该变量将子 Node 对象加入当前 Node。
intIndex = mNode.Index
'对这条记录,在 Title 表中查找与 Titles 记录集
'中出现相同 PubID 的记录。如果找到这样的记录,
'则在 TreeView 控件中加入 Node 对象,并将用所
'找到记录的 Title、 ISBN 和 Author 字段为新
'Node 对象的属性赋值。
Do Until rsTitles.EOF
If rsPublishers!PubID = rsTitles!PubID Then
Set mNode = tvwDB.Nodes. _
Add(intIndex, tvwChild)
mNode.Text = rsTitles!Title '文本。
mNode.Key = rsTitles!ISBN '唯一的 ID。
mNode.Tag = "Authors" '表名。
mNode.Image = "leaf" '图象。
End If
rsTitles.MoveNext 'Titles 中 的下一条记录。
Loop
'将 rsTitles 重新设置为 Titles 的第一条记录。
rsTitles.MoveFirst
'移动到下一条 Publisher 记录。
rsPublishers.MoveNext
Loop
End Sub
节点间的关系和对关系节点的引用
每个节点可以是子节点,也可以是父节点,这取决于它与其它节点之间的关系。Node 对象具有一些属性,可以用来返回子节点或父节点的各种信息。例如,下面的代码用 Children 属性返回某个节点的子节点个数。
MsgBox tvwMyTree.Nodes(10).Children
然而,另外一些属性与 Children 属性不同,它们不返回信息,但返回对其它节点对象的引用。例如,Parent 属性返回对特定节点(只要该节点不是根节点)的父节点的引用。利用该引用,可以调用适用于 Node 对象的任何方法或设置属性来管理其父节点。例如,下面的代码返回父节点的 Text 和 Index 属性:
Dim nodX As Node '声明对象变量。
Dim I as Integer '声明计数器变量。
For I = 1 to 4
Set nodX = TreeView1.Nodes.Add(,,,"Node " & Cstr(i))
'使用引用来设置其它属性,如 Enabled。
nodX.Enabled = True
'把图像属性设置为在关联的 ImageList 中的图像 3。
nodX.ExpandedImage = 3
Next I