使用 Bookmarks 和 SelBookmarks 跟蹤記錄
Bookmarks 和 SelBookmarks 提供了標(biāo)記記錄的一種手段。當(dāng)編寫應(yīng)用程序中的特定功能(諸如允許最終用戶手工地選擇多個(gè)不相鄰的記錄,進(jìn)行所選記錄的大批更新)時(shí),這就很有必要。在這些情形中,需要標(biāo)記哪些記錄已被選擇,因此可以使用 SelBookmarks 集合及其屬性。
有兩個(gè)函數(shù),分別是 CellText 和 CellValue 方法,需要標(biāo)記才能正確執(zhí)行。
標(biāo)記用戶的選擇
SelBookmarks 集合包含所有選定的記錄的書簽。當(dāng)最終用戶手工選擇記錄時(shí)(即在單擊時(shí)按住 CTRL 鍵),每一個(gè)選定的記錄的書簽都會(huì)加入到該集合中。使用標(biāo)準(zhǔn)的循環(huán),用戶可以知道已經(jīng)選定了什么,也可以保存書簽(因?yàn)榭赡苄枰謴?fù)某個(gè)值),以及執(zhí)行操作:
Dim i as Integer ’ 計(jì)數(shù)器
Dim intCount As Integer
intCount = DataGrid1.SelBookmarks.Count - 1
ReDim arrSelBK(intCount) ’ 聲明用于保存書簽的數(shù)組。
For i = 0 To intCount
ArrSelBK(i) = DataGrid1.SelBookmarks(i)
’ 在此處執(zhí)行操作。如果該操作必須被
’ 取消,則退出該循環(huán),然后使用該數(shù)
’ 組來取消這些更改。
Next i
通過在程序中添加到 SelBookmarks 集合來選擇記錄
通過將記錄添加到這個(gè)集合,也可以在程序中選定記錄。例如,可能有一個(gè)顯示指定的客戶所有訂貨的網(wǎng)格。如果要高亮顯示該客戶花費(fèi)超過 $100的所有記錄,則對(duì)記錄進(jìn)行過濾,并將結(jié)果書簽添加到 SelBookmarks 集合。
Dim rs As Recordset
Set rs = Adodc1.Recordset
While Not rs.EOF
If rs!SupplierID = 12 Then
DataGrid1.SelBookmarks.Add rs.Bookmark
End If
rs.MoveNext
Wend
顯示計(jì)算結(jié)果字段
假設(shè)在表中有一個(gè)名為 "Price" 的字段,并且想使用本地稅率來計(jì)算表中每一項(xiàng)的稅費(fèi)。這就是一個(gè)計(jì)算結(jié)果字段,可以通過修改 DataSource 的查詢來計(jì)算這個(gè)值,并把這個(gè)值返回給 DataGrid 控件。
要在 DataGrid 控件中創(chuàng)建一個(gè)計(jì)算結(jié)果字段
1. 確認(rèn)在機(jī)器上已為 Northwind 數(shù)據(jù)庫建立了一個(gè)OLE DB 數(shù)據(jù)源;如果還沒有創(chuàng)建這樣的一個(gè)數(shù)據(jù)源,請(qǐng)按照“創(chuàng)建 Northwind 的OLE DBData 連接”的步驟操作。
2. 在窗體上放置一個(gè) ADO Data 控件和一個(gè) DataGrid 控件。
3. 將 ADO Data 控件的ConnectionString 屬性設(shè)置為 Northwind 的數(shù)據(jù)源。
4. 設(shè)置 ADO Data 控件的 RecordSource 屬性。在“屬性”窗口中,單擊“記錄源”并輸入 Select ProductName, UnitPrice,(UnitPrice * .082) As Tax From Products。
5. 將 DataGrid 控件的 DataSource 屬性設(shè)置為這個(gè) ADO Data 控件。
6. 運(yùn)行該工程。
與類模塊一起使用 DataGrid 控件
如果想要訪問以自定義格式或以 ODBC 驅(qū)動(dòng)程序不直接支持的格式存放的數(shù)據(jù),可以創(chuàng)建一個(gè)類來封裝該數(shù)據(jù)。然后可以編寫該類的自定義函數(shù)來檢索這些數(shù)據(jù)。這樣該類就變成了一種數(shù)據(jù)源,可以被任何數(shù)據(jù)使用者(如DataGrid 控件)使用。
在這個(gè)類模塊的Initialize 事件中,首先通過聲明一個(gè)作為 New ADODB.Recordset的變量,來創(chuàng)建一個(gè) ADODB recordset 對(duì)象。在創(chuàng)建了這個(gè) recordset 對(duì)象后,再添加字段,每個(gè)數(shù)據(jù)源中的每個(gè)字段都要加入。然后使用合適的數(shù)據(jù)填充這個(gè)記錄集。
注意 也可以使用 OLEDB 示例提供者來創(chuàng)建一個(gè)數(shù)據(jù)源。關(guān)于 OLEDB示例提供者的詳細(xì)信息,請(qǐng)參閱“創(chuàng)建帶有數(shù)據(jù)提供方的部件”。
類模塊有一個(gè) GetDataMember 事件,只要當(dāng)數(shù)據(jù)使用者(諸如 DataGrid 控件)需要數(shù)據(jù)時(shí)就產(chǎn)生該事件。在這個(gè)事件中,Data 參數(shù)被設(shè)置為在Initialize 事件中所創(chuàng)建的 recordset 對(duì)象。
如果要使用這個(gè)類模塊,應(yīng)創(chuàng)建一個(gè)具有一個(gè) DataGrid 控件的窗體。在該窗體的 Load 事件的代碼中,將該控件的 DataSource 屬性設(shè)置為這個(gè)類。
注意 數(shù)據(jù)類模塊在設(shè)計(jì)時(shí)是不可用的。例如,如果使用 DataGrid 控件,則當(dāng)用戶在“屬性”窗口中單擊“數(shù)據(jù)源”時(shí),所有可用的數(shù)據(jù)源都會(huì)出現(xiàn)在一個(gè)下拉列表中。但其中不會(huì)有這個(gè)數(shù)據(jù)類模塊,它只能在代碼中設(shè)置。
Bookmarks 和 SelBookmarks 提供了標(biāo)記記錄的一種手段。當(dāng)編寫應(yīng)用程序中的特定功能(諸如允許最終用戶手工地選擇多個(gè)不相鄰的記錄,進(jìn)行所選記錄的大批更新)時(shí),這就很有必要。在這些情形中,需要標(biāo)記哪些記錄已被選擇,因此可以使用 SelBookmarks 集合及其屬性。
有兩個(gè)函數(shù),分別是 CellText 和 CellValue 方法,需要標(biāo)記才能正確執(zhí)行。
標(biāo)記用戶的選擇
SelBookmarks 集合包含所有選定的記錄的書簽。當(dāng)最終用戶手工選擇記錄時(shí)(即在單擊時(shí)按住 CTRL 鍵),每一個(gè)選定的記錄的書簽都會(huì)加入到該集合中。使用標(biāo)準(zhǔn)的循環(huán),用戶可以知道已經(jīng)選定了什么,也可以保存書簽(因?yàn)榭赡苄枰謴?fù)某個(gè)值),以及執(zhí)行操作:
Dim i as Integer ’ 計(jì)數(shù)器
Dim intCount As Integer
intCount = DataGrid1.SelBookmarks.Count - 1
ReDim arrSelBK(intCount) ’ 聲明用于保存書簽的數(shù)組。
For i = 0 To intCount
ArrSelBK(i) = DataGrid1.SelBookmarks(i)
’ 在此處執(zhí)行操作。如果該操作必須被
’ 取消,則退出該循環(huán),然后使用該數(shù)
’ 組來取消這些更改。
Next i
通過在程序中添加到 SelBookmarks 集合來選擇記錄
通過將記錄添加到這個(gè)集合,也可以在程序中選定記錄。例如,可能有一個(gè)顯示指定的客戶所有訂貨的網(wǎng)格。如果要高亮顯示該客戶花費(fèi)超過 $100的所有記錄,則對(duì)記錄進(jìn)行過濾,并將結(jié)果書簽添加到 SelBookmarks 集合。
Dim rs As Recordset
Set rs = Adodc1.Recordset
While Not rs.EOF
If rs!SupplierID = 12 Then
DataGrid1.SelBookmarks.Add rs.Bookmark
End If
rs.MoveNext
Wend
顯示計(jì)算結(jié)果字段
假設(shè)在表中有一個(gè)名為 "Price" 的字段,并且想使用本地稅率來計(jì)算表中每一項(xiàng)的稅費(fèi)。這就是一個(gè)計(jì)算結(jié)果字段,可以通過修改 DataSource 的查詢來計(jì)算這個(gè)值,并把這個(gè)值返回給 DataGrid 控件。
要在 DataGrid 控件中創(chuàng)建一個(gè)計(jì)算結(jié)果字段
1. 確認(rèn)在機(jī)器上已為 Northwind 數(shù)據(jù)庫建立了一個(gè)OLE DB 數(shù)據(jù)源;如果還沒有創(chuàng)建這樣的一個(gè)數(shù)據(jù)源,請(qǐng)按照“創(chuàng)建 Northwind 的OLE DBData 連接”的步驟操作。
2. 在窗體上放置一個(gè) ADO Data 控件和一個(gè) DataGrid 控件。
3. 將 ADO Data 控件的ConnectionString 屬性設(shè)置為 Northwind 的數(shù)據(jù)源。
4. 設(shè)置 ADO Data 控件的 RecordSource 屬性。在“屬性”窗口中,單擊“記錄源”并輸入 Select ProductName, UnitPrice,(UnitPrice * .082) As Tax From Products。
5. 將 DataGrid 控件的 DataSource 屬性設(shè)置為這個(gè) ADO Data 控件。
6. 運(yùn)行該工程。
與類模塊一起使用 DataGrid 控件
如果想要訪問以自定義格式或以 ODBC 驅(qū)動(dòng)程序不直接支持的格式存放的數(shù)據(jù),可以創(chuàng)建一個(gè)類來封裝該數(shù)據(jù)。然后可以編寫該類的自定義函數(shù)來檢索這些數(shù)據(jù)。這樣該類就變成了一種數(shù)據(jù)源,可以被任何數(shù)據(jù)使用者(如DataGrid 控件)使用。
在這個(gè)類模塊的Initialize 事件中,首先通過聲明一個(gè)作為 New ADODB.Recordset的變量,來創(chuàng)建一個(gè) ADODB recordset 對(duì)象。在創(chuàng)建了這個(gè) recordset 對(duì)象后,再添加字段,每個(gè)數(shù)據(jù)源中的每個(gè)字段都要加入。然后使用合適的數(shù)據(jù)填充這個(gè)記錄集。
注意 也可以使用 OLEDB 示例提供者來創(chuàng)建一個(gè)數(shù)據(jù)源。關(guān)于 OLEDB示例提供者的詳細(xì)信息,請(qǐng)參閱“創(chuàng)建帶有數(shù)據(jù)提供方的部件”。
類模塊有一個(gè) GetDataMember 事件,只要當(dāng)數(shù)據(jù)使用者(諸如 DataGrid 控件)需要數(shù)據(jù)時(shí)就產(chǎn)生該事件。在這個(gè)事件中,Data 參數(shù)被設(shè)置為在Initialize 事件中所創(chuàng)建的 recordset 對(duì)象。
如果要使用這個(gè)類模塊,應(yīng)創(chuàng)建一個(gè)具有一個(gè) DataGrid 控件的窗體。在該窗體的 Load 事件的代碼中,將該控件的 DataSource 屬性設(shè)置為這個(gè)類。
注意 數(shù)據(jù)類模塊在設(shè)計(jì)時(shí)是不可用的。例如,如果使用 DataGrid 控件,則當(dāng)用戶在“屬性”窗口中單擊“數(shù)據(jù)源”時(shí),所有可用的數(shù)據(jù)源都會(huì)出現(xiàn)在一個(gè)下拉列表中。但其中不會(huì)有這個(gè)數(shù)據(jù)類模塊,它只能在代碼中設(shè)置。