ListView 的说明:完整代码

在 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 Sub

Private Sub tvwDB_NodeClick(ByVal Node As Node)
   '检查 Tag 是否是 "Publisher"。如果是,则
   '调用 MakeColumns 过程,然后调用
   ' GetTitles 函数。
   If Node.Tag = "Publisher" Then 
      MakeColumns
      GetTitles Val(Node.Key)
   End If
End Sub

Private Sub MakeColumns()
   '清空 ColumnHeaders 集合。
   lvwDB.ColumnHeaders.Clear
   '添加四个 ColumnHeaderlvwDB.ColumnHeaders.Add , , "Title", 2000
   lvwDB.ColumnHeaders.Add , , "Author"
   lvwDB.ColumnHeaders.Add , , "Year", 350
   lvwDB.ColumnHeaders.Add , , "ISBN"
End Sub

Private 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
'添加 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

Private Function GetAuthor(ISBN)
   '声明 DAO 对象变量。
   Dim rsTitleAuthor As Recordset
   Dim rsAuthors As Recordset    
   '将对象变量设置为记录集。
   Set rsTitleAuthor = mDbBiblio. _
   OpenRecordset("Title Author", dbOpenDynaset)
   Set rsAuthors = mDbBiblio. _
   OpenRecordset("Authors", dbOpenDynaset)
   '创建查询字符串。
   Dim strQuery As String
   strQuery = "ISBN = " & "'" & ISBN & "'"
   rsTitleAuthor.FindFirst strQuery
   '如果没有作者,则返回 "n/a"'否则,返回作者的姓名。

   If rsTitleAuthor.NoMatch Then
      GetAuthor = "n/a"
      Exit Function
   Else
      '假定找到了正确的记录集。
      '然后用 Au_ID 字段值重新设置查询字符串,
      '并搜索“作者”表。
      strQuery = "Au_ID = " & rsTitleAuthor!AU_ID
      rsAuthors.FindFirst strQuery
      '返回 Author 字段中的作者姓名。
      GetAuthor = rsAuthors!Author
   End If
End Function