在 ListView 的说明 1 到 4 中讨论的代码,除了充填 TreeView 控件的过程,都在下面给出。要得到充填 TreeView 控件的代码,请参阅“TreeView 控件的说明:将 TreeView 绑定到 Biblio.mdb 数据库”。要得到本代码的工作示例,请参阅列在 Samples目录中的示例应用程序 DataTree.vbp。
'普通声明Private mDbBiblio As Database '数据库变量。Private Sub Form_Load()'打开Biblio.mdb,并将对象变量'设置为该数据库。Set mDbBiblio = DBEngine.Workspaces(0). _OpenDatabase("Biblio.mdb")'充填TreeView控件的代码'在这里没有给出。End SubPrivate Sub tvwDB_NodeClick(ByVal Node As Node)'检查Tag是否是"Publisher"。如果是,则'调用MakeColumns过程,然后调用' GetTitles函数。If Node.Tag = "Publisher" ThenMakeColumnsGetTitles Val(Node.Key)End IfEnd SubPrivate Sub MakeColumns()'清空ColumnHeaders集合。lvwDB.ColumnHeaders.Clear'添加四个ColumnHeader。lvwDB.ColumnHeaders.Add , , "Title", 2000lvwDB.ColumnHeaders.Add , , "Author"lvwDB.ColumnHeaders.Add , , "Year", 350lvwDB.ColumnHeaders.Add , , "ISBN"End SubPrivate Sub GetTitles(PubID)'删除旧的书目。lvwDB.ListItems.Clear'声明Recordset类型的对象变量。Dim rsTitles As Recordset'对该记录,用仅查找具有相同PubID的书目的查询'创建一个记录集。'对该记录集中的每条记录,在' ListView控件中添加ListItem对象,'并用记录的Title、ISBN和Author字段'设置新对象的属性。Set rsTitles = mDbBiblio.OpenRecordset _("select * from Titles where PubID = " & PubID)Do Until rsTitles.EOF'添加ListItem。Set mItem = lvwDB.ListItems.Add()mItem.Text = rsTitles!TITLEmItem.SmallIcon = "smlBook"mItem.Icon = "book"mItem.Key = rsTitles!ISBN'用函数得到作者并设置' SubItems(1)属性。mItem.SubItems(1) = GetAuthor(rsTitles!ISBN)If Not IsNull(rsTitles![Year Published]) ThenmItem.SubItems(2) = _rsTitles![Year Published]End IfmItem.SubItems(3) = rsTitles!ISBNrsTitles.MoveNextLoopEnd SubPrivate Function GetAuthor(ISBN)'声明DAO对象变量。Dim rsTitleAuthor As RecordsetDim rsAuthors As Recordset'将对象变量设置为记录集。Set rsTitleAuthor = mDbBiblio. _OpenRecordset("Title Author", dbOpenDynaset)Set rsAuthors = mDbBiblio. _OpenRecordset("Authors", dbOpenDynaset)'创建查询字符串。Dim strQuery As StringstrQuery = "ISBN = " & "'" & ISBN & "'"rsTitleAuthor.FindFirst strQuery'如果没有作者,则返回"n/a"。'否则,返回作者的姓名。If rsTitleAuthor.NoMatch ThenGetAuthor = "n/a"Exit FunctionElse'假定找到了正确的记录集。'然后用Au_ID字段值重新设置查询字符串,'并搜索“作者”表。strQuery = "Au_ID = " & rsTitleAuthor!AU_IDrsAuthors.FindFirst strQuery'返回Author字段中的作者姓名。GetAuthor = rsAuthors!AuthorEnd IfEnd Function