使用DataGrid控件
DataGrid控件是一種類似於電子數據表的綁定控件,可以顯示一系列行和列來表示Recordset對象的記錄和字段。可以使用DataGrid來創建一個允許最終用戶閱讀和寫入到絕大多數數據庫的應用程序。DataGrid控件可以在設計時快速進行配置,只需少量代碼或無需代碼。當在設計時設置了DataGrid控件的DataSource屬性後,就會用數據源的記錄集來自動填充該控件,以及自動設置該控件的列標頭。然後您就可以編輯該網格的列;刪除、重新安排、添加列標頭、或者調整任意一列的寬度。
在運行時,可以在程序中切換DataSource來察看不同的表,或者可以修改當前數據庫的查詢,以返回一個不同的記錄集合。
注意DataGrid控件與VisualBasic5.0中的DBGrid是代碼兼容的,除了一個例外:DataGrid控件不支持DBGrid的“解除綁定模式”概念。DBGrid控件包括在VisualBasic的Tools目錄中。
可能的用法
查看和編輯在遠程或本地數據庫中的數據。
與另一個數據綁定的控件(諸如DataList控件)聯合使用,使用DataGrid控件來顯示一個表的記錄,這個表通過一個公共字段鏈接到由第二個數據綁定控件所顯示的表。
使用DataGrid控件的設計時特性
可以不編寫任何代碼,只通過使用DataGrid控件的設計時特性來創建一個數據庫應用程序。下面的說明概要地說明了在實現DataGrid控件的典型應用時的一般步驟。完整的循序漸進的指示,請參閱主題“DataGrid方案1:使用DataGrid控件創建一個簡單數據庫應用程序”。
要在設計時實現一個DataGrid控件
1.為要訪問的數據庫創建一個Microsoft數據鏈接(.MDL)文件。請參閱“創建NorthwindOLEDB數據鏈接”主題,以獲得一個示例。
2.在窗體上放置一個ADOData控件,並將其ConnectionString屬性設置為在第1步中所創建的OLEDB數據源。
3.在這個AdoData控件的RecordSource屬性中輸入一條將返回一個記
錄集的SQL語句。例如,Select*FromMyTableNameWhereCustID=12
4.在窗體上放置一個DataGrid控件,並將其DataSource屬性設置為這個ADOData控件。
5.右鍵單擊該DataGrid控件,然後單擊“檢索字段”。
6.右鍵單擊該DataGrid控件,然後單擊“編輯”。
7.重新設置該網格的大小、刪除或添加網格的列。
8.右鍵單擊該DataGrid控件,然後單擊“屬性”。
9.使用“屬性頁”對話框來設置該控件的適當的屬性,將該網格配置為所需的外觀和行為。
在運行時更改顯示的數據
在創建了一個使用設計時特性的網格後,也可以在運行時動態地更改該網格的數據源。下面介紹實現這一功能的通常方法。
更改DataSource的RecordSource
更改所顯示的數據的最通常方法是改變該DataSource的查詢。例如,如果DataGrid控件使用一個ADOData控件作為其DataSource,則重寫RecordSource和刷新該ADOData控件都將改變所顯示的數據。
'ADOData控件連接的是Northwind數據庫的'Products表。新查詢查找所有
'SupplierID=12的記錄。
DimstrQueryAsString
strQuery="SELECT*FROMSuppliersWHERESupplierID=12"
Adodc1.RecordSource=strQuery
Adodc1.Refresh
更改DataSource
在運行時,可以將DataSource屬性重新設置為一個不同的數據源。例如,您可能具有若干個ADOData控件,每個控件連接不同的數據庫,或設置為不同的RecordSource屬性。可以簡單地將DataSource從一個ADOData控件重新設置為另一個ADOData控件:
'將DataSource重新設置為一個連接到Pubs數據庫的、
'使用Authors表的ADOData控件。
SetDataGrid1.DataSource=adoPubsAuthors
重新綁定DataSource
當將DataGrid控件用於一個遠程數據庫,諸如SQLServer時,可以改變表的結構。例如,可以給這個表添加一個字段。在這種情形下,可以調用Rebind方法根據新的結構來重新創建該網格。注意,如果已經在設計時改變了這個列的布局,DataGrid控件將會試圖重新創建當前的布局,包括任何空的列。不過,通過首先調用ClearFields方法,可以強制該網格重新設置所有的列。
從DataGrid返回值
在DataGrid被連接到一個數據庫後,可能想要監視用戶單擊了哪一個單元。可以使用RowColChange事件——而不是Click事件。如下所示:
PrivateSubDataGrid1_RowColChange(LastRowAsVariant,ByValLastColAsInteger)
'顯示用戶所單擊的單元的文字、行和列的信息。
Debug.PrintDataGrid1.Text;DataGrid1.Row;DataGrid1.Col
EndSub
使用CellText和CellValue方法
當一個列使用NumberFormat屬性設置格式後,CellText和CellValue屬性是很有用的。NumberFormat屬性不必更改實際的數據格式就可以更改任何包含數字的列的格式。例如,給定一個網格,其中包含一個名為ProductID的、包含整數的列。下面的代碼將使DataGrid以"P-0000"的格式來顯示數據。換句話說,盡管在ProductID字段中所包含的實際數值為"3",但該網格所顯示的值將是"P-0003"。
PrivateSubForm_Load()
DataGrid1.Columns("ProductID").NumberFormat="P-0000"
EndSub
要返回數據庫中所包含的實際值,應使用CellValue方法,如下所示:
PrivateSubDataGrid1_RowColChange(LastRowAsVariant,ByValLastColAsInteger)
Debug.Print_
DataGrid1.Columns("ProductID").CellValue(DataGrid1.Bookmark)
EndSub
注意上面所用的CellValue和下面所用的CellText值,都需要將Bookmark屬性作為一個參數,功能才正確。
相反地,如果要返回該字段的格式化的值,應使用CellText方法:
PrivateSubDataGrid1_RowColChange(LastRowAsVariant,ByValLastColAsInteger)
Debug.Print_
DataGrid1.Columns("ProductID").CellText(DataGrid1.Bookmark)
EndSub
注意上面的CellText方法等價於使用DataGrid控件的Text屬性。
下一步
要閱讀關於使用該控件創建簡單的應用程序的一個循序漸進的過程,請參閱“使用DataGrid控件創建簡單的數據庫應用程序”,或“創建一個連接DataList控件的DataGrid”。
要了解關於Split對象以及如何對其編程的詳細信息,請參閱“操作DataGrid視圖”。