VB--DataGrid控件的使用_第1頁(yè)
VB--DataGrid控件的使用_第2頁(yè)
VB--DataGrid控件的使用_第3頁(yè)
VB--DataGrid控件的使用_第4頁(yè)
VB--DataGrid控件的使用_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、使用 DataGrid 控件DataGrid 控件是一種類似于電子數(shù)據(jù)表的綁定控件,可以顯示一系列行和列來(lái)表示 Recordset 對(duì)象的記錄和字段??梢允褂?DataGrid 來(lái)創(chuàng)建一個(gè)允許最終用戶閱讀和寫入到絕大多數(shù)數(shù)據(jù)庫(kù)的應(yīng)用程序。DataGrid 控件可以在設(shè)計(jì)時(shí)快速進(jìn)行配置,只需少量代碼或無(wú)需代碼。當(dāng)在設(shè)計(jì)時(shí)設(shè)置了DataGrid 控件的 DataSource 屬性后,就會(huì)用數(shù)據(jù)源的記錄集來(lái)自動(dòng)填充該控件,以及自動(dòng)設(shè)置該控件的列標(biāo)頭。然后您就可以編輯該網(wǎng)格的列;刪除、重新安排、添加列標(biāo)頭、或者調(diào)整任意一列的寬度。在運(yùn)行時(shí),可以在程序中切換 DataSource 來(lái)察看不同的表,或者可

2、以修改當(dāng)前數(shù)據(jù)庫(kù)的查詢,以返回一個(gè)不同的記錄集合。注意 DataGrid 控件與 Visual Basic 5.0中的 DBGrid 是代碼兼容的,除了一個(gè)例外:DataGrid 控件不支持 DBGrid 的“解除綁定模式”概念。DBGrid 控件包括在 Visual Basic 的 Tools 目錄中。可能的用法查看和編輯在遠(yuǎn)程或本地?cái)?shù)據(jù)庫(kù)中的數(shù)據(jù)。與另一個(gè)數(shù)據(jù)綁定的控件(諸如 DataList 控件)聯(lián)合使用,使用 DataGrid控件來(lái)顯示一個(gè)表的記錄,這個(gè)表通過(guò)一個(gè)公共字段鏈接到由第二個(gè)數(shù)據(jù)綁定控件所顯示的表。使用 DataGrid 控件的設(shè)計(jì)時(shí)特性可以不編寫任何代碼,只通過(guò)使用 Da

3、taGrid 控件的設(shè)計(jì)時(shí)特性來(lái)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序。下面的說(shuō)明概要地說(shuō)明了在實(shí)現(xiàn) DataGrid 控件的典型應(yīng)用時(shí)的一般步驟。完整的循序漸進(jìn)的指示,請(qǐng)參閱主題“DataGrid 方案1: 使用 DataGrid 控件創(chuàng)建一個(gè)簡(jiǎn)單數(shù)據(jù)庫(kù)應(yīng)用程序”。要在設(shè)計(jì)時(shí)實(shí)現(xiàn)一個(gè) DataGrid 控件1. 為要訪問(wèn)的數(shù)據(jù)庫(kù)創(chuàng)建一個(gè) Microsoft 數(shù)據(jù)鏈接 (.MDL) 文件。請(qǐng)參閱“創(chuàng)建 Northwind OLE DB 數(shù)據(jù)鏈接”主題,以獲得一個(gè)示例。2. 在窗體上放置一個(gè) ADO Data 控件,并將其 ConnectionString 屬性設(shè)置為在第 1 步中所創(chuàng)建的OLE DB 數(shù)據(jù)源。

4、3. 在這個(gè) Ado Data 控件的 RecordSource 屬性中輸入一條將返回一個(gè)記錄集的 SQL 語(yǔ)句。例如,Select * From MyTableName Where CustID = 124. 在窗體上放置一個(gè) DataGrid 控件,并將其 DataSource 屬性設(shè)置為這個(gè) ADO Data 控件。5. 右鍵單擊該 DataGrid 控件,然后單擊“檢索字段”。6. 右鍵單擊該 DataGrid 控件,然后單擊“編輯”。7. 重新設(shè)置該網(wǎng)格的大小、刪除或添加網(wǎng)格的列。8. 右鍵單擊該 DataGrid 控件,然后單擊“屬性”。9. 使用“屬性頁(yè)”對(duì)話框來(lái)設(shè)置該控件的適當(dāng)

5、的屬性,將該網(wǎng)格配置為所需的外觀和行為。在運(yùn)行時(shí)更改顯示的數(shù)據(jù)在創(chuàng)建了一個(gè)使用設(shè)計(jì)時(shí)特性的網(wǎng)格后,也可以在運(yùn)行時(shí)動(dòng)態(tài)地更改該網(wǎng)格的數(shù)據(jù)源。下面介紹實(shí)現(xiàn)這一功能的通常方法。更改 DataSource 的RecordSource更改所顯示的數(shù)據(jù)的最通常方法是改變?cè)?DataSource 的查詢。例如,如果DataGrid 控件使用一個(gè)ADO Data控件作為其 DataSource,則重寫RecordSource和刷新該ADO Data 控件都將改變所顯示的數(shù)據(jù)。' ADO Data 控件連接的是 Northwind 數(shù)據(jù)庫(kù)的' Products 表。新查詢查找所有' Su

6、pplierID = 12 的記錄。Dim strQuery As StringstrQuery = "SELECT * FROM Suppliers WHERE SupplierID = 12"Adodc1.RecordSource = strQueryAdodc1.Refresh更改 DataSource在運(yùn)行時(shí),可以將 DataSource 屬性重新設(shè)置為一個(gè)不同的數(shù)據(jù)源。例如,您可能具有若干個(gè) ADO Data 控件,每個(gè)控件連接不同的數(shù)據(jù)庫(kù),或設(shè)置為不同的 RecordSource 屬性??梢院?jiǎn)單地將 DataSource 從一個(gè) ADO Data控件重新設(shè)置為另

7、一個(gè) ADO Data 控件: ' 將 DataSource 重新設(shè)置為一個(gè)連接到 Pubs 數(shù)據(jù)庫(kù)的、' 使用 Authors 表的 ADO Data 控件。Set DataGrid1.DataSource = adoPubsAuthors重新綁定 DataSource當(dāng)將 DataGrid 控件用于一個(gè)遠(yuǎn)程數(shù)據(jù)庫(kù),諸如 SQLServer 時(shí),可以改變表的結(jié)構(gòu)。例如,可以給這個(gè)表添加一個(gè)字段。在這種情形下,可以調(diào)用Rebind 方法根據(jù)新的結(jié)構(gòu)來(lái)重新創(chuàng)建該網(wǎng)格。注意,如果已經(jīng)在設(shè)計(jì)時(shí)改變了這個(gè)列的布局,DataGrid 控件將會(huì)試圖重新創(chuàng)建當(dāng)前的布局,包括任何空的列。不過(guò),

8、通過(guò)首先調(diào)用 ClearFields 方法,可以強(qiáng)制該網(wǎng)格重新設(shè)置所有的列。從 DataGrid 返回值在 DataGrid 被連接到一個(gè)數(shù)據(jù)庫(kù)后,可能想要監(jiān)視用戶單擊了哪一個(gè)單元??梢允褂?RowColChange 事件而不是 Click 事件。如下所示:Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) ' 顯示用戶所單擊的單元的文字、行和列的信息。Debug.Print DataGrid1.Text; DataGrid1.Row; DataGrid1.ColEnd Sub

9、使用 CellText 和 CellValue 方法當(dāng)一個(gè)列使用 NumberFormat 屬性設(shè)置格式后,CellText 和 CellValue 屬性是很有用的。NumberFormat 屬性不必更改實(shí)際的數(shù)據(jù)格式就可以更改任何包含數(shù)字的列的格式。例如,給定一個(gè)網(wǎng)格,其中包含一個(gè)名為 ProductID的、包含整數(shù)的列。下面的代碼將使 DataGrid 以"P-0000" 的格式來(lái)顯示數(shù)據(jù)。換句話說(shuō),盡管在 ProductID 字段中所包含的實(shí)際數(shù)值為 "3",但該網(wǎng)格所顯示的值將是 "P-0003"。Private Sub Fo

10、rm_Load()DataGrid1.Columns("ProductID").NumberFormat = "P-0000"End Sub要返回?cái)?shù)據(jù)庫(kù)中所包含的實(shí)際值,應(yīng)使用 CellValue 方法,如下所示:Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)Debug.Print _DataGrid1.Columns("ProductID").CellValue(DataGrid1.Bookmark)End Sub注意

11、上面所用的 CellValue 和下面所用的 CellText 值,都需要將Bookmark 屬性作為一個(gè)參數(shù),功能才正確。相反地,如果要返回該字段的格式化的值,應(yīng)使用 CellText 方法:Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) Debug.Print _DataGrid1.Columns("ProductID").CellText(DataGrid1.Bookmark)End Sub注意 上面的 CellText 方法等價(jià)于使用 DataGrid

12、控件的 Text 屬性。下一步要閱讀關(guān)于使用該控件創(chuàng)建簡(jiǎn)單的應(yīng)用程序的一個(gè)循序漸進(jìn)的過(guò)程,請(qǐng)參閱“使用 DataGrid 控件創(chuàng)建簡(jiǎn)單的數(shù)據(jù)庫(kù)應(yīng)用程序”,或“創(chuàng)建一個(gè)連接DataList 控件的 DataGrid”。 要了解關(guān)于 Split 對(duì)象以及如何對(duì)其編程的詳細(xì)信息,請(qǐng)參閱“操作DataGrid 視圖”。 創(chuàng)建 Northwind 的OLE DB 數(shù)據(jù)鏈接訪問(wèn)數(shù)據(jù)的一個(gè)重要步驟是為想要訪問(wèn)的每個(gè)數(shù)據(jù)庫(kù)都創(chuàng)建一個(gè) OLE DB數(shù)據(jù)源。下面的步驟為 Visual Basic 所提供的Nwind.mdb (Northwind) 數(shù)據(jù)庫(kù)創(chuàng)建這樣一個(gè)對(duì)象。這個(gè)數(shù)據(jù)源被用于 Visual Basic

13、 文檔所提供的一些示例過(guò)程。在一個(gè)計(jì)算機(jī)上只需要?jiǎng)?chuàng)建一次OLE DB數(shù)據(jù)源。要?jiǎng)?chuàng)建 Northwind 的OLE DB 數(shù)據(jù)源1. 打開(kāi) Windows Explorer或 Windows NT Explorer。2. 打開(kāi)您想要?jiǎng)?chuàng)建 OLE DB 數(shù)據(jù)源的目錄。在該示例中,打開(kāi) ProgramFiles、Microsoft Visual Studio和VB98。3. 右鍵單擊 Explorer 的右邊窗格,然后單擊上下文菜單上的“新建”。從文件類型列表中單擊“Microsoft 數(shù)據(jù)鏈接”。4. 重命名新文件 Northwind.MDL。5. 右鍵單擊文件并單擊上下文菜單上的“屬性”,以顯示

14、“Northwind.MDLProperties”對(duì)話框。6. 單擊“連接”選項(xiàng)卡。7. 單擊“提供方”框并選擇“Microsoft Jet 3.51 OLE DB Provider”。8. 在Data Source 框中輸入nwind.mdb文件的路徑。9. 單擊“測(cè)試連接”,檢測(cè)連接。10. 如果連接通過(guò),單擊“確定”。注意 也可以通過(guò)在“控制面板”中單擊“數(shù)據(jù)鏈接”圖標(biāo)創(chuàng)建一個(gè) OLE DB數(shù)據(jù)源。在“管理數(shù)據(jù)鏈接文件”對(duì)話框中,單擊“新建”創(chuàng)建一個(gè)新的數(shù)據(jù)源。使用 DataGrid 和 ADO Data控件創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)應(yīng)用程序只使用一個(gè) DataGrid 和一個(gè) ADO Dat

15、a 控件,可以創(chuàng)建一個(gè)允許最終用戶閱讀和寫入記錄集的數(shù)據(jù)庫(kù)應(yīng)用程序。要使用 ADO 數(shù)據(jù)控件來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)應(yīng)用程序1. 為 Northwind 數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)OLE DB 數(shù)據(jù)源。如果還沒(méi)有創(chuàng)建數(shù)據(jù)源,請(qǐng)按照“創(chuàng)建 Northwind 的OLE DB Data Link”中的步驟操作。2. 在Visual Basic 中創(chuàng)建一個(gè)新的標(biāo)準(zhǔn)的 EXE 工程。如果 DataGrid 控件不在“工具箱”中,則用右鍵單擊“工具箱”,然后使用“部件”對(duì)話框來(lái)添加控件。同時(shí)也載入 ADO 控件。3. 在空窗體上各放置控件的一個(gè)實(shí)例。4. 將 ADO 控件的ConnectionString 屬性設(shè)置為

16、 Northwind 的數(shù)據(jù)源。單擊并選定該 ADO Data 控件,并按 F4 鍵出現(xiàn)“屬性”窗口。單擊“ConnectionString”,然后單擊 OLE DB File。單擊 Northwind 的數(shù)據(jù)源。5. 設(shè)置 ADO 控件的 RecordSource 屬性。在“屬性”窗口中,單擊“記錄源”并輸入一條 SQL 語(yǔ)句來(lái)填充 DataGrid控件。在本例中,輸入“Select * From Products”。6. 將 DataGrid 控件的 DataSource 屬性設(shè)置為這個(gè) ADO Data 控件。單擊并選定該 DataGrid 控件。在其“屬性”窗口中,單擊“數(shù)據(jù)源”將出現(xiàn)

17、一個(gè)包含所有數(shù)據(jù)控件的下拉列表在本例中只有 ADO Data 控件。單擊這個(gè)控件。7. 按 F5 鍵運(yùn)行這個(gè)工程。創(chuàng)建一個(gè)連接 DataList 控件的 DataGridDataGrid 的通常用法是顯示數(shù)據(jù)庫(kù)的一個(gè)表所提供的“詳細(xì)內(nèi)容”。例如,Northwind (Nwind.mdb) 數(shù)據(jù)庫(kù)包括兩個(gè)表,一個(gè)名為 "Suppliers",另一個(gè)名為 "Products"。在本例中,我們使用 DataList 控件來(lái)顯示 "Suppliers" 表中的供應(yīng)商的公司名稱。當(dāng)用戶單擊任意一個(gè)公司名稱時(shí),這個(gè) DataList 控件將提供該

18、公司的 SupplierID。使用這個(gè)標(biāo)識(shí)符,就可以構(gòu)造一個(gè)查詢,在 "Products" 表中檢索具有相匹配的 SupplierID 的所有記錄。換句話說(shuō),當(dāng)用戶單擊一個(gè)公司時(shí)(在 DataList 控件中),該公司生產(chǎn)的所有產(chǎn)品將出現(xiàn)在 DataGrid 控件中。 要使用一個(gè)指定供應(yīng)商的產(chǎn)品填充一個(gè) DataGrid 控件1. 確認(rèn)在機(jī)器上已為 Northwind 數(shù)據(jù)庫(kù)建立了一個(gè)OLE DB 數(shù)據(jù)源;如果還沒(méi)有創(chuàng)建這樣的一個(gè)數(shù)據(jù)源,請(qǐng)按照“創(chuàng)建 Northwind 的OLE DBData連接”的步驟操作。2. 在Visual Basic 中創(chuàng)建一個(gè)新的標(biāo)準(zhǔn)的 EXE

19、工程。如果 DataGrid、DataList 和 ADO Data 控件不在“工具箱”中,則右鍵單擊“工具箱”,然后單擊“部件”。在“部件”對(duì)話框中雙擊“MicrosoftDataGrid Control”、“Microsoft DataList Controls”以及“Microsoft ADOControl”。3. 在一個(gè)空窗體中各放置一個(gè) DataGrid 和 DataList 控件的實(shí)例。將 DataList 控件放置在該窗體的左上角,然后將 DataGrid 控件放在它的下面的某處。4. 在窗體放置兩個(gè) ADO Data 控件實(shí)例。選擇第一個(gè) ADO Data 控件,并按 F4 鍵

20、來(lái)顯示其“屬性頁(yè)”。將該控件的 Name 屬性設(shè)置為 adoSuppliers。選擇第二個(gè) ADO Data 控件并將其 Name 屬性設(shè)置為 adoProducts。將第一個(gè)控件直接放在 DataList 控件的下面,把第二個(gè)控件直接放在 DataGrid 控件的下面。5. 將這兩個(gè) ADO Data 控件的 ConnectionString 屬性設(shè)置為 Northwind的OLE DB 數(shù)據(jù)源。選擇名為 adoSuppliers 的控件,然后將其ConnectionString 屬性設(shè)置為Northwind 的OLE DB data source (Northwind.mdl)。選擇名為

21、adoProducts的控件,并重復(fù)該操作。6. 設(shè)置這兩個(gè) ADO Data 控件的 RecordSource 屬性。選擇 adoSuppliers 并在其“屬性頁(yè)”上單擊“RecordSoure”。輸入 Select* From Suppliers。這個(gè)查詢將指示該 ADO Data 控件返回 Suppliers 表中的所有記錄。選擇 adoProducts,單擊“RecordSoure”,并輸入 Select *From Products。這個(gè)查詢將返回在 Products 表中的所有記錄。7. 將 DataList 控件的 RowSource 屬性設(shè)置為 adoSuppliers。Ro

22、wSource 屬性決定由哪一個(gè)數(shù)據(jù)源為 ListField 屬性供應(yīng)數(shù)據(jù)。8. 將 DataList 控件的 ListField 屬性設(shè)置為 CompanyName。ListField 屬性被設(shè)置成名為 Suppliers 的表中的字段名稱。在運(yùn)行時(shí),DataList 控件顯示在這個(gè)屬性中所指定的字段的值。在本例中,該屬性將顯示在 Suppliers 表中找到的一個(gè)公司名稱。9. 將 DataList 控件的 BoundColumn 屬性設(shè)置為 SupplierID。BoundColumn 屬性被設(shè)為 Suppliers 表中的第二個(gè)字段。在本例中,這個(gè)屬性就被設(shè)為 SupplierID 字

23、段。當(dāng)單擊 DataList 控件時(shí),BoundText屬性返回與在 DataList 控件中所顯示的公司相關(guān)聯(lián)的 SupplierID 字段的值。這個(gè)值將用于對(duì) Products 表的查詢,該查詢?yōu)?DataGrid 控件提供數(shù)據(jù)。10. 將 DataGrid 控件的 DataSource 屬性設(shè)置為 adoProducts。DataSource 屬性為該控件指定數(shù)據(jù)源。在本例中,該屬性被設(shè)置為名為adoProducts 的 ADO Data 控件,這將返回 Products 表中的所有記錄。11. 在窗體的代碼模塊中,添加下述內(nèi)容:Private Sub Datalist1_Click()

24、' 聲明一個(gè)用來(lái)包含新查詢的字符串變量。這個(gè)新的' 查詢使用 DataList 控件的BoundText屬性' 來(lái)提供一個(gè) SupplierID 值。新查詢查找所有' 具有相同的 SupplierID 的產(chǎn)品。這個(gè)查詢被' 指定給名為 adoProducts 的 ADO Data 控件' 的 RecordSource 屬性。在刷新控件后,DataGrid' 將使用包含由同一個(gè)公司供應(yīng)的所有產(chǎn)品的新' 記錄集來(lái)更新。Dim strQuery As StringstrQuery = "Select * FROM Produc

25、ts WHERE SupplierID = " & _Datalist1.BoundTextWith adoProducts.RecordSource = strQuery.RefreshEnd WithWith DataGrid1.ClearFields.ReBindEnd WithEnd Sub12. 運(yùn)行該工程。單擊 DataList 控件中的任意公司名稱,將自動(dòng)用該公司所供應(yīng)的產(chǎn)品更新 DataGrid 控件。使用列通過(guò)更改 DataSource 屬性,可以動(dòng)態(tài)地更改在 DataGrid 控件中顯示的數(shù)據(jù)。例如,可以顯示同一個(gè)數(shù)據(jù)庫(kù)的不同表。如果這樣做,則 DataG

26、rid 控件將只根據(jù)默認(rèn)的屬性顯示數(shù)據(jù)。添加、刪除或隱藏列通過(guò)使用 Columns 集合和 Column 對(duì)象的屬性和方法,可以在程序中添加、刪除或隱藏列。添加和刪除一列要在運(yùn)行時(shí)添加一列,可以使用 Add 方法。如果首先聲明一個(gè)變量,并將新對(duì)象賦給該變量,就可以用簡(jiǎn)明的代碼設(shè)置各種屬性。Private Sub AddColumn()' 在最右邊的位置添加一列。然后設(shè)置其 Visible、Width、' Caption以及 Alignment 屬性。DataField 屬性則指定' 該列將綁定到哪一個(gè)字段。Dim c As ColumnSet c = DataGrid1

27、.Columns.Add(DataGrid1.Columns.Count)With c.Visible = True.Width = 1000.Caption = "我的新列".DataField = Adodc1.Recordset.Fields("ProductName").Name.Alignment = dbgRightEnd WithEnd Sub可以使用方法來(lái)刪除任意一列。請(qǐng)確保使用 ColIndex 參數(shù)來(lái)指定要?jiǎng)h除的列。下面的代碼將刪除被單擊的列。Private Sub DataGrid1_HeadClick(ByVal ColIndex

28、 As Integer)DataGrid1.Columns.Remove ColIndexEnd Sub隱藏一列通過(guò)將 Visible 屬性設(shè)置為 False,可以隱藏任意一列。當(dāng)想要限制用戶可以查看或編輯的列時(shí)這一功能特別有用。下面的示例在 Columns 集合中循環(huán),隱藏除少數(shù)列之外的所有列。 Private Sub HideColumns()' 使用 DataField 屬性來(lái)判別正在測(cè)試的是哪一列。' 只顯示三列:ProductName、UnitPrice以及' UnitsInStock。Dim c As ColumnFor Each c In DataGrid

29、1.ColumnsSelect Case c.DataFieldCase "ProductName"c.Visible = TrueCase "UnitPrice"c.Visible = TrueCase "UnitsInStock"c.Visible = Truec.Caption = "In Stock" ' 更改這個(gè)列的標(biāo)頭。Case Else ' 隱藏其它所有的列。c.Visible = FalseEnd SelectNext cEnd Sub操作 DataGrid 視圖一個(gè)“拆分”的網(wǎng)格使

30、最終用戶對(duì)相同的數(shù)據(jù)可以擁有多個(gè)視圖。例如,假設(shè)有一個(gè)由十個(gè)字段組成的大表。在這種情況下,在控件中察看的記錄集將有十列寬,除非窗體非常寬,否則用戶將無(wú)法同時(shí)看見(jiàn)所有列的內(nèi)容。,而且,假設(shè)用戶只對(duì)第一列和最后一列感興趣(例如,第一列是名字,最后一列是電話號(hào)碼)。為了能同時(shí)看到在兩端的列(不重新安排列的順序),可以對(duì)網(wǎng)格進(jìn)行拆分。創(chuàng)建一個(gè) Split 對(duì)象在設(shè)計(jì)時(shí),可以創(chuàng)建一個(gè)拆分,具體步驟是:右鍵單擊網(wǎng)格,單擊“編輯”,再單擊右鍵,然后單擊“拆分”。通過(guò)右鍵單擊該控件,并單擊“屬性”來(lái)顯示“屬性頁(yè)”對(duì)話框,可以編輯這個(gè)拆分??梢允褂谩安鸱帧边x項(xiàng)卡來(lái)自定義拆分。要?jiǎng)h除一個(gè)拆分,右鍵單擊該拆分,并單

31、擊“刪除”。在運(yùn)行時(shí),最終用戶也可以通過(guò)單擊位于這個(gè)網(wǎng)格控件的左下邊的右邊的選項(xiàng)卡,以手工方式來(lái)拆分該網(wǎng)格(除非不允許這個(gè)操作),如下圖所示:默認(rèn)情況下,DataGrid 控件包含一個(gè) Split 對(duì)象。防止最終用戶添加拆分的代碼為: DataGrid1.Splits(0).AllowSizing = False在程序中添加和刪除拆分DataGrid 控件包含一個(gè) Split 對(duì)象的集合。要在程序中添加拆分,可以使用 Add 方法,如下所示:DataGrid1.Splits.Add 1注意 Add 方法需要新的拆分索引作為其參數(shù)。要添加一個(gè)拆分,應(yīng)將這個(gè)索引參數(shù)設(shè)置為 Splits 集合的 C

32、ount 屬性值。使用 Split 集合的 Add 方法,可以在程序中按照實(shí)際需要添加拆分。由于添加多于兩個(gè)以上的拆分將使網(wǎng)格很難使用,可以使用該集合的 Count 屬性來(lái)限制拆分的數(shù)目。 If DataGrid1.Splits.Count < 3 Then ' 添加一個(gè)拆分。DataGrid1.Splits.Add DataGrid1.Splits.CountEnd If使拆分同步當(dāng)拆分多于一個(gè)時(shí),可能希望控制這些拆分如何滾動(dòng)。例如,在一個(gè)具有三個(gè)拆分的網(wǎng)格中,可以決定只讓第一個(gè)和第三個(gè)拆分同步,而讓中間的拆分獨(dú)立地滾動(dòng)。要同步任何兩個(gè)(或多個(gè))拆分,只需將每個(gè) Split 對(duì)

33、象的 ScrollGroup 屬性設(shè)置為同一個(gè)值。' 使第一個(gè)和第三個(gè) Split 對(duì)象同步。With DataGrid1.Splits(0).ScrollGroup = 1.Splits(1).ScrollGroup = 2.Splits(2).ScrollGroup = 1End With通過(guò)設(shè)置 Scrollbars 屬性,使同步的拆分組只顯示一個(gè)滾卷?xiàng)l,從而進(jìn)一步自定義拆分的外觀。控制 Tab 鍵和箭頭鍵的行為使用 WrapCellPointer、TabAcrossSplits以及 TabAction 屬性,可以決定當(dāng)最終用戶按下 tab 鍵或箭頭鍵時(shí)網(wǎng)格的行為。在這三個(gè)屬性中

34、,TabAction 屬性級(jí)別最高,它決定 WrapCellPointer 和TabAcrossSplits 這兩個(gè)屬性是否能生效。TabAction 有三個(gè)設(shè)置值: ControlNavigation、Column Navigation 和 Grid Navigation。當(dāng)該屬性設(shè)置為 ControlNavigation 時(shí),按 Tab 鍵根據(jù) TabIndex 將焦點(diǎn)切換到下一個(gè)控件。這一設(shè)置優(yōu)先于 WrapCellPointer 和 TabAcrossSplits。WrapCellPointer 屬性決定在任何單個(gè)的拆分中 tab 鍵和箭頭鍵的行為。如果該屬性設(shè)置為 True,且當(dāng)前單

35、元位于最后一列,這時(shí)最終用戶按 tab 鍵則使第一列的下一行變成當(dāng)前的單元。不過(guò),如果當(dāng)前單元位于最后一行的最后一列時(shí),這時(shí)就沒(méi)有地方可以“換行”。 TabAcrossSplits 屬性決定當(dāng)網(wǎng)格中存在兩個(gè)或多個(gè)拆分時(shí) tab 和箭頭鍵的行為。如果該屬性設(shè)置為 True,且當(dāng)前單元位于任何一個(gè)拆分的最后一列,則按Tab或箭頭鍵將使當(dāng)前單元“跳” 到下一個(gè)拆分的第一列。當(dāng)前單元仍保持相同的行位置。注意 如果 WrapCellPointer 和 TabAcrossSplits 屬性都設(shè)置為 True,則只有當(dāng)前單元位于最后一個(gè)拆分的最后一列時(shí)才會(huì)換行。這時(shí)當(dāng)前單元將換到第一個(gè)拆分的第一列中的下一行

36、。自定義列集合每一個(gè) Split 對(duì)象都有一個(gè) Columns 屬性,允許用戶來(lái)操作一個(gè) Column對(duì)象的集合。通過(guò)這樣做,可以更改每個(gè) Split 對(duì)象的外觀。例如,可以用一個(gè)拆分包含顯示姓氏字段和名字字段的兩個(gè)列,而第二個(gè)拆分則顯示電話字段和地址字段。要實(shí)現(xiàn)這一目標(biāo),需要將其它的每一列的 Visible 屬性設(shè)置為 False,如下所示:' 枚舉 Columns 集合,對(duì)每一個(gè) Column 對(duì)象的 DataField 屬性' 進(jìn)行測(cè)試。如果測(cè)試失敗,則隱藏這一列。Dim i As Integer' 隱藏除 ProductName 列之外的所有列。For i =

37、0 To DataGrid1.Splits(0).Columns.Count - 1If DataGrid1.Splits(0).Columns(i).DataField <> "ProductName" ThenDataGrid1.Splits(0).Columns(i).Visible = FalseEnd IfNext i' 隱藏除 UnitPrice 列之外的所有列。For i = 0 To DataGrid1.Splits(0).Columns.Count - 1If DataGrid1.Splits(1).Columns(i).DataFie

38、ld <> "UnitPrice" ThenDataGrid1.Splits(1).Columns(i).Visible = FalseEnd IfNext I使用 Bookmarks 和 SelBookmarks 跟蹤記錄Bookmarks 和 SelBookmarks 提供了標(biāo)記記錄的一種手段。當(dāng)編寫應(yīng)用程序中的特定功能(諸如允許最終用戶手工地選擇多個(gè)不相鄰的記錄,進(jìn)行所選記錄的大批更新)時(shí),這就很有必要。在這些情形中,需要標(biāo)記哪些記錄已被選擇,因此可以使用 SelBookmarks 集合及其屬性。有兩個(gè)函數(shù),分別是 CellText 和 CellValue

39、 方法,需要標(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 IntegerintCount = DataGrid1.SelBookmarks.Count - 1ReDim arrSelBK(intCount) ' 聲明用于保存書簽的數(shù)組。For i = 0 To i

40、ntCountArrSelBK(i) = DataGrid1.SelBookmarks(i)' 在此處執(zhí)行操作。如果該操作必須被' 取消,則退出該循環(huán),然后使用該數(shù)' 組來(lái)取消這些更改。Next i通過(guò)在程序中添加到 SelBookmarks 集合來(lái)選擇記錄通過(guò)將記錄添加到這個(gè)集合,也可以在程序中選定記錄。例如,可能有一個(gè)顯示指定的客戶所有訂貨的網(wǎng)格。如果要高亮顯示該客戶花費(fèi)超過(guò) $100的所有記錄,則對(duì)記錄進(jìn)行過(guò)濾,并將結(jié)果書簽添加到 SelBookmarks 集合。Dim rs As RecordsetSet rs = Adodc1.RecordsetWhile N

41、ot rs.EOFIf rs!SupplierID = 12 ThenDataGrid1.SelBookmarks.Add rs.BookmarkEnd Ifrs.MoveNextWend顯示計(jì)算結(jié)果字段假設(shè)在表中有一個(gè)名為 "Price" 的字段,并且想使用本地稅率來(lái)計(jì)算表中每一項(xiàng)的稅費(fèi)。這就是一個(gè)計(jì)算結(jié)果字段,可以通過(guò)修改 DataSource 的查詢來(lái)計(jì)算這個(gè)值,并把這個(gè)值返回給 DataGrid 控件。要在 DataGrid 控件中創(chuàng)建一個(gè)計(jì)算結(jié)果字段1. 確認(rèn)在機(jī)器上已為 Northwind 數(shù)據(jù)庫(kù)建立了一個(gè)OLE DB 數(shù)據(jù)源;如果還沒(méi)有創(chuàng)建這樣的一個(gè)數(shù)據(jù)源,請(qǐng)

42、按照“創(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 Dat

43、a 控件。6. 運(yùn)行該工程。與類模塊一起使用 DataGrid 控件如果想要訪問(wèn)以自定義格式或以 ODBC 驅(qū)動(dòng)程序不直接支持的格式存放的數(shù)據(jù),可以創(chuàng)建一個(gè)類來(lái)封裝該數(shù)據(jù)。然后可以編寫該類的自定義函數(shù)來(lái)檢索這些數(shù)據(jù)。這樣該類就變成了一種數(shù)據(jù)源,可以被任何數(shù)據(jù)使用者(如DataGrid 控件)使用。在這個(gè)類模塊的Initialize 事件中,首先通過(guò)聲明一個(gè)作為 New ADODB.Recordset的變量,來(lái)創(chuàng)建一個(gè) ADODB recordset 對(duì)象。在創(chuàng)建了這個(gè) recordset 對(duì)象后,再添加字段,每個(gè)數(shù)據(jù)源中的每個(gè)字段都要加入。然后使用合適的數(shù)據(jù)填充這個(gè)記錄集。注意 也可以使用 O

44、LEDB 示例提供者來(lái)創(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)用戶在“屬性”窗口中單擊“

45、數(shù)據(jù)源”時(shí),所有可用的數(shù)據(jù)源都會(huì)出現(xiàn)在一個(gè)下拉列表中。但其中不會(huì)有這個(gè)數(shù)據(jù)類模塊,它只能在代碼中設(shè)置。使用類模塊創(chuàng)建一個(gè)數(shù)據(jù)源下面的示例使用一個(gè)類模塊來(lái)創(chuàng)建一個(gè)簡(jiǎn)單數(shù)據(jù)源。然后通過(guò) DataSource屬性將 DataGrid 控件綁定到該模塊。要?jiǎng)?chuàng)建一個(gè)用于DataGrid 的類1. 創(chuàng)建一個(gè)新的標(biāo)準(zhǔn) Exe 工程。2. 給窗體添加一個(gè) DataGrid 控件。如果DataGrid控件不在“工具箱”中,則在“工程”菜單中單擊“部件”,再單擊“Microsoft DataGrid Control”,然后單擊“確定”。3. 在“工程”菜單中,單擊“引用”。在“引用”對(duì)話框中,單擊“Microso

46、ftActiveX Data Objects 2.0 Library”。4. 在“工程”菜單中,單擊“添加類模塊”來(lái)給工程添加一個(gè)數(shù)據(jù)類模塊。5. 在“工程資源管理器”窗口中,單擊并選定“類”圖標(biāo),并按 F4 鍵顯示“屬性”窗口。6. 在“屬性”窗口中,將類的名稱更改為NamesData。7. 在“屬性”窗口中,單擊“DataSourceBehavior”并將該屬性更改為vbDataSource。8. 在該類模塊的 Declarations 部分,創(chuàng)建一個(gè) ADODB Recordset變量,如下所示: Option ExplicitPrivate WithEvents rsNames As

47、ADODB.RecordSet使用 WithEvents 關(guān)鍵詞來(lái)聲明該變量,使用戶可以對(duì) RecordSet 對(duì)象的事件編程。9. 在該類的 Initialize 事件中,添加下述代碼:Private Sub Class_Initialize()' 將新的數(shù)據(jù)成員的名稱添加到 DataMember 集合' 這使其它對(duì)象可以看見(jiàn)這些可用的DataMembersDataMembers.Add "Names"Set rsNames = New ADODB.RecordSet ' 設(shè)置對(duì)象變量。' 創(chuàng)建一個(gè)具有兩個(gè)字段的 recordset,并打開(kāi)

48、該 recordset。' 第一個(gè)記錄具有一個(gè)整數(shù)的數(shù)據(jù)類型,第二個(gè)記錄是一個(gè)最大可' 達(dá) 256 個(gè)字符的字符串。CursorType 被設(shè)置為 OpenStatic' 一個(gè)可更新的對(duì)一組記錄的快照。LockType 被設(shè)置為' LockOptimistic,以允許對(duì)該 recordset 進(jìn)行更新。With rsNames.Fields.Append "ID", adInteger.Fields.Append "Name", adBSTR, 255.CursorType = adOpenStatic.LockType = adLockOptimistic.OpenEnd WithDim i As IntegerFor i = 1 to 10 ' 添加十條記錄。rsNames.AddNewrsNames!ID =

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論