1,216
社区成员
发帖
与我相关
我的任务
分享
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
'添加四个 ColumnHeader。
lvwDB.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
'添加 ListItem。
Set 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