ListView 的说明 3:用过程从 Biblio.mdb 数据库中获取书目

该主题中的代码示例来源于示例应用程序 DataTree.vbp,该示例应用程序列在 Samples 目录中。

在说明“与 TreeView 控件一起使用 ListView 控件”中,ListView 控件和 TreeView 控件是协同工作的。在那个说明中用 TreeView 控件的 NodeClick 事件调用了两个过程。第一个用于创建 ColumnHeader 对象,第二个用于充填 ListView 控件。

该说明继续开发了第二个名为“GetTitles”的过程,它将从 Biblio.mdb 数据库中得到的书目充填到 ListView 控件中。

下面的示例使用了如下对象:

要创建充填 ListView 控件的过程,请按照以下步骤执行:

在 GetTitles 中:

  1. 过程用 Clear 方法清空 ListItems 集合。

  2. 用查询创建“标题”记录集。

  3. 用 Do Until 语句为记录集中的每个记录创建 ListItem 对象。

GetTitles 过程:用 Clear 方法清空 ListItems 集合

每次调用 GetTitles 过程时,需要查询 Biblio.mdb 数据库以创建新的 ListItem 对象的集合。然而,要做的第一件事是用 Clear 方法清空旧的集合:

lvwDB.ListItems.Clear '清除所有 ListItems

用查询创建“标题”记录集

调用 GetTitles 过程时,Node 属性的 Key 属性值被传递给该过程。由于 Key 属性包含了标识出版商的唯一编号(PubID 字段),该值可用于查找 Titles 表以获得与 PubID 值匹配的记录。

完成这一工作的最有效的方法是,创建一个查询,只包括与 Titles 表的 PubID 字段具有相同 PubID 值的记录。这个查询如下所示:

Set rsTitles = mDbBiblio.OpenRecordset _
("select * from Titles where PubID = " & PubID)

用 Do Until 语句为记录集中的每个记录创建 ListItem 对象

记录集创建之后,就可以ListItem 集合添加对象了。下面的代码遍历该记录集,为每条记录创建 ListItem 对象,用记录集中的数据设置 Text 和 SubItems 属性。完整的过程代码如下所示:

Private Sub GetTitles(PubID)
   '清除旧的书目。
   lvwDB.ListItems.Clear
   '声明 Recordset 类型的对象变量。
   Dim rsTitles As Recordset
   '对该记录,用仅查找具有相同 PubID 的书目的查询
   '创建一个记录集。
   '对该记录集中的每条记录,在
   ' ListView 控件中添加 ListItem 对象,
   '并用记录的 TitleISBN  Author 字段
   '设置新对象的属性。
   Set rsTitles = mDbBiblio.OpenRecordset _
   ("select * from Titles where PubID = " & PubID)

   Do Until rsTitles.EOF
   '添加 ListItemSet mItem = lvwDB.ListItems.Add() 
         mItem.Text = rsTitles!TITLE 
         mItem.SmallIcon = "smlBook" 
         mItem.Icon = "book"   
         mItem.Key = rsTitles!ISBN
         '用函数得到书的作者并设置
         ' SubItems(1) 属性。
         mItem.SubItems(1) = GetAuthor(rsTitles!ISBN)
         If Not IsNull(rsTitles![Year Published]) Then
            mItem.SubItems(2) =  _
            rsTitles![Year Published]
         End If
         mItem.SubItems(3) = rsTitles!ISBN
         rsTitles.MoveNext
   Loop
End Sub