使用 DataRepeater 控件的一般目的是维护已浏览过记录的历史。历史可以显示在一个 ListBox 控件中。任何时候当用户在历史中单击一项时,DataRepeater 控件会在其客户区中显示该记录。而在处理其它数据识别的控件(例如 DataGrid 控件)时,开发者必须为想要跟踪的每条记录存储和检索书签。
重点 书签只在记录集的存活期中有效,在记录集之间不可保持或互换。
下面的循序渐进过程首先通过在数组中存储已浏览过记录的书签来创建历史。在 ListBox 控件中还添加了与该记录相关的值。当用户单击 ListBox 控件中的一项时,将使用单击项的 ListIndex 来检索该记录的书签。将 VisibleRecords 属性设置为书签就会使该记录出现在 DataRepeater 控件中。
下面循序渐进过程是基于“使用 DataRepeater 控件”中创建的工程进行的。
要为浏览过的记录创建历史,请按照以下步骤执行:
单击“工程”菜单上的“首选”,打开“首选”对话框。选中“Microsoft ActiveX Data 对象 2.0 库”,单击“确定”关闭对话框。
Option Explicit
Private varBookmarks() As Variant
Private rsProducts As ADODB.Recordset
Private Sub Form_Load()
ReDim varBookmarks(0)
Set rsProducts = adodc1.Recordset
End Sub
Private Sub DataRepeater1_CurrentRecordChanged() ' CurrentRecordChanged事件在窗体打开后立即发生。'这时,UBound(varBookmarks) = 0,并且没有添加'记录。因此必须为历史列表添加第一条记录,'并将该记录的书签添加到数组中。然后将数组索'引增加为1并退出子程序。'当下一次单击记录时,这段代码会被忽略。Dim iUpper As Integer '书签数组的上界。Dim i As Integer ' ListBox的计数器If UBound(varBookmarks) = 0 ThenlstHistory.AddItem rsProducts!ProductNamevarBookmarks(0) = DataRepeater1.CurrentRecordReDim Preserve varBookmarks(1)Exit SubEnd If'在用户单击一条记录时将执行下面的代码。'首先检查列表框,确保单击的记录没有被添加到历史列'表中。如果已经在历史列表中,则退出。For i = 0 To lstHistory.ListCount - 1If lstHistory.List(i) = rsProducts!ProductName _Then Exit SubNext I'如果没有重复,则将该记录添加到历史中,'同时将书签缓存进数组。lstHistory.AddItem rsProducts!ProductNamevarBookmarks(UBound(varBookmarks)) = DataRepeater1.CurrentRecord'增加数组。ReDim Preserve varBookmarks(UBound(varBookmarks) + 1)End Sub
Private Sub lstHistory_Click()
Debug.Print lstHistory.Text, lstHistory.ListIndex
DataRepeater1.VisibleRecords(1) = _
varBookmarks(lstHistory.ListIndex)
End Sub