在 DataRepeater 控件中维护单击记录的历史

使用 DataRepeater 控件的一般目的是维护已浏览过记录的历史。历史可以显示在一个 ListBox 控件中。任何时候当用户在历史中单击一项时,DataRepeater 控件会在其客户区中显示该记录。而在处理其它数据识别的控件(例如 DataGrid 控件)时,开发者必须为想要跟踪的每条记录存储和检索书签。

重点 书签只在记录集的存活期中有效,在记录集之间不可保持或互换。

下面的循序渐进过程首先通过在数组中存储已浏览过记录的书签来创建历史。在 ListBox 控件中还添加了与该记录相关的值。当用户单击 ListBox 控件中的一项时,将使用单击项的 ListIndex 来检索该记录的书签。将 VisibleRecords 属性设置为书签就会使该记录出现在 DataRepeater 控件中。

下面循序渐进过程是基于“使用 DataRepeater 控件”中创建的工程进行的。

要为浏览过的记录创建历史,请按照以下步骤执行:

  1. 添加对 Microsoft ActiveX Data 对象 2.0 库的引用。

    单击“工程”菜单上的“首选”,打开“首选”对话框。选中“Microsoft ActiveX Data 对象 2.0 库”,单击“确定”关闭对话框。

  2. 在窗体代码模块的声明部分中,声明一个变量数组,并为 ADOBD 记录集的对象声明一个对象变量。使用ADODB 记录集进行漫游。
    Option Explicit
    Private varBookmarks() As Variant
    Private rsProducts As ADODB.Recordset
  3. 在窗体的 Load 事件中,使用 ReDim 语句初始化数组。将记录集对象变量设置为 ADO 数据控件的记录集。
    Private Sub Form_Load()
    ReDim varBookmarks(0)
    Set rsProducts = adodc1.Recordset
    End Sub
  4. 在窗体上绘制一个 ListBox 控件,并将其名称由 Listbox1 改为 lstHistory

  5. 向 DataRepeater 控件的 CurrentRecordChanged 事件中添加下面的代码:
    Private Sub DataRepeater1_CurrentRecordChanged()
    ' CurrentRecordChanged 事件在窗体打开后立即发生。
    ' 这时,UBound(varBookmarks) = 0,并且没有添加
    ' 记录。因此必须为历史列表添加第一条记录,
    ' 并将该记录的书签添加到数组中。然后将数组索
    ' 引增加为1并退出子程序。
    ' 当下一次单击记录时,这段代码会被忽略。
    Dim iUpper As Integer ' 书签数组的上界。
    Dim i As Integer      ' ListBox 的计数器
    If UBound(varBookmarks) = 0 Then
    lstHistory.AddItem rsProducts!ProductName
    varBookmarks(0) = DataRepeater1.CurrentRecord
    ReDim Preserve varBookmarks(1)
    Exit Sub
    End If
    
    ' 在用户单击一条记录时将执行下面的代码。
    ' 首先检查列表框,确保单击的记录没有被添加到历史列
    ' 表中。如果已经在历史列表中,则退出。
    For i = 0 To lstHistory.ListCount - 1
    If lstHistory.List(i) = rsProducts!ProductName _
    Then Exit Sub
    Next I
    
    ' 如果没有重复,则将该记录添加到历史中,
    ' 同时将书签缓存进数组。
    lstHistory.AddItem rsProducts!ProductName
    varBookmarks(UBound(varBookmarks)) = DataRepeater1.CurrentRecord
    ' 增加数组。
    ReDim Preserve varBookmarks(UBound(varBookmarks) + 1)
    End Sub
  6. 下面的代码将VisibleRecords 属性设置为已缓存的书签。将这些代码粘贴到窗体的代码模块中。
    Private Sub lstHistory_Click()
    Debug.Print lstHistory.Text, lstHistory.ListIndex
    DataRepeater1.VisibleRecords(1) = _
    varBookmarks(lstHistory.ListIndex)
    End Sub
  7. 运行该工程。用 DataRepeater 控件的滚动条在记录集中滚动。单击任意记录会将该记录添加进历史中。单击列表框中的任意项可以返回到该记录。