<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大鳥的學習樂園
    路漫漫其修遠兮,吾將上下而求索
    posts - 26,comments - 27,trackbacks - 0

    DataGrid 控件是一種類似于電子數據表的綁定控件,可以顯示一系列行和列來表示 Recordset 對象的記錄和字段。可以使用 DataGrid 來創建一個允許最終用戶閱讀和寫入到絕大多數數據庫的應用程序。DataGrid 控件可以在設計時快速進行配置,只需少量代碼或無需代碼。當在設計時設置了DataGrid 控件的 DataSource 屬性后,就會用數據源的記錄集來自動填充該控件,以及自動設置該控件的列標頭。然后您就可以編輯該網格的列;刪除、重新安排、添加列標頭、或者調整任意一列的寬度。
        在運行時,可以在程序中切換 DataSource 來察看不同的表,或者可以修改當前數據庫的查詢,以返回一個不同的記錄集合。
        注意 DataGrid 控件與 Visual Basic 5.0中的 DBGrid 是代碼兼容的,除了一個例外:DataGrid 控件不支持 DBGrid 的“解除綁定模式”概念。DBGrid 控件包括在 Visual Basic 的 Tools 目錄中。
        可能的用法
        查看和編輯在遠程或本地數據庫中的數據。
        與另一個數據綁定的控件(諸如 DataList 控件)聯合使用,使用 DataGrid控件來顯示一個表的記錄,這個表通過一個公共字段鏈接到由第二個數據綁定控件所顯示的表。
        使用 DataGrid 控件的設計時特性
        可以不編寫任何代碼,只通過使用 DataGrid 控件的設計時特性來創建一個數據庫應用程序。下面的說明概要地說明了在實現 DataGrid 控件的典型應用時的一般步驟。完整的循序漸進的指示,請參閱主題“DataGrid 方案1: 使用 DataGrid 控件創建一個簡單數據庫應用程序”。
    要在設計時實現一個 DataGrid 控件
        1. 為要訪問的數據庫創建一個 Microsoft 數據鏈接 (.MDL) 文件。請參閱“創建 Northwind OLE DB 數據鏈接”主題,以獲得一個示例。
        2. 在窗體上放置一個 ADO Data 控件,并將其 ConnectionString 屬性設置為在第 1 步中所創建的OLE DB 數據源。
        3. 在這個 Ado Data 控件的 RecordSource 屬性中輸入一條將返回一個記
    錄集的 SQL 語句。例如,Select * From MyTableName Where CustID = 12
        4. 在窗體上放置一個 DataGrid 控件,并將其 DataSource 屬性設置為這個 ADO Data 控件。
        5. 右鍵單擊該 DataGrid 控件,然后單擊“檢索字段”。
        6. 右鍵單擊該 DataGrid 控件,然后單擊“編輯”。
        7. 重新設置該網格的大小、刪除或添加網格的列。
        8. 右鍵單擊該 DataGrid 控件,然后單擊“屬性”。
        9. 使用“屬性頁”對話框來設置該控件的適當的屬性,將該網格配置為所需的外觀和行為。
        在運行時更改顯示的數據
        在創建了一個使用設計時特性的網格后,也可以在運行時動態地更改該網格的數據源。下面介紹實現這一功能的通常方法。
        更改 DataSource 的RecordSource
        更改所顯示的數據的最通常方法是改變該 DataSource 的查詢。例如,如果DataGrid 控件使用一個ADO Data控件作為其 DataSource,則重寫RecordSource和刷新該ADO Data 控件都將改變所顯示的數據。
        ' ADO Data 控件連接的是 Northwind 數據庫的' Products 表。新查詢查找所有
        ' SupplierID = 12 的記錄。
        Dim strQuery As String
        strQuery = "SELECT * FROM Suppliers WHERE SupplierID = 12"
        Adodc1.RecordSource = strQuery
        Adodc1.Refresh
        更改 DataSource
        在運行時,可以將 DataSource 屬性重新設置為一個不同的數據源。例如,您可能具有若干個 ADO Data 控件,每個控件連接不同的數據庫,或設置為不同的 RecordSource 屬性。可以簡單地將 DataSource 從一個 ADO Data控件重新設置為另一個 ADO Data 控件:
        ' 將 DataSource 重新設置為一個連接到 Pubs 數據庫的、
        ' 使用 Authors 表的 ADO Data 控件。
        Set DataGrid1.DataSource = adoPubsAuthors
        重新綁定 DataSource
        當將 DataGrid 控件用于一個遠程數據庫,諸如 SQLServer 時,可以改變表的結構。例如,可以給這個表添加一個字段。在這種情形下,可以調用Rebind 方法根據新的結構來重新創建該網格。注意,如果已經在設計時改變了這個列的布局,DataGrid 控件將會試圖重新創建當前的布局,包括任何空的列。不過,通過首先調用 ClearFields 方法,可以強制該網格重新設置所有的列。
        從 DataGrid 返回值
        在 DataGrid 被連接到一個數據庫后,可能想要監視用戶單擊了哪一個單元。可以使用 RowColChange 事件——而不是 Click 事件。如下所示:
        Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
           ' 顯示用戶所單擊的單元的文字、行和列的信息。
           Debug.Print DataGrid1.Text; DataGrid1.Row; DataGrid1.Col
        End Sub
        使用 CellText 和 CellValue 方法
        當一個列使用 NumberFormat 屬性設置格式后,CellText 和 CellValue 屬性是很有用的。NumberFormat 屬性不必更改實際的數據格式就可以更改任何包含數字的列的格式。例如,給定一個網格,其中包含一個名為 ProductID的、包含整數的列。下面的代碼將使 DataGrid 以"P-0000" 的格式來顯示數據。換句話說,盡管在 ProductID 字段中所包含的實際數值為 "3",但該網格所顯示的值將是 "P-0003"。
          Private Sub Form_Load()
            DataGrid1.Columns("ProductID").NumberFormat = "P-0000"
          End Sub
        要返回數據庫中所包含的實際值,應使用 CellValue 方法,如下所示:
          Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
            Debug.Print _
            DataGrid1.Columns("ProductID").CellValue(DataGrid1.Bookmark)
          End Sub
        注意 上面所用的 CellValue 和下面所用的 CellText 值,都需要將Bookmark 屬性作為一個參數,功能才正確。
        相反地,如果要返回該字段的格式化的值,應使用 CellText 方法:
          Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
            Debug.Print _
            DataGrid1.Columns("ProductID").CellText(DataGrid1.Bookmark)
          End Sub
        注意 上面的 CellText 方法等價于使用 DataGrid 控件的 Text 屬性。
        下一步
        要閱讀關于使用該控件創建簡單的應用程序的一個循序漸進的過程,請參閱“使用 DataGrid 控件創建簡單的數據庫應用程序”,或“創建一個連接DataList 控件的 DataGrid”。
        要了解關于 Split 對象以及如何對其編程的詳細信息,請參閱“操作DataGrid 視圖”。
        創建 Northwind 的OLE DB 數據鏈接
        訪問數據的一個重要步驟是為想要訪問的每個數據庫都創建一個 OLE DB數據源。下面的步驟為 Visual Basic 所提供的Nwind.mdb (Northwind) 數據庫創建這樣一個對象。這個數據源被用于 Visual Basic 文檔所提供的一些示例過程。在一個計算機上只需要創建一次OLE DB數據源。
        要創建 Northwind 的OLE DB 數據源
        1. 打開 Windows Explorer或 Windows NT Explorer。
        2. 打開您想要創建 OLE DB 數據源的目錄。在該示例中,打開 ProgramFiles、Microsoft Visual Studio和VB98。
        3. 右鍵單擊 Explorer 的右邊窗格,然后單擊上下文菜單上的“新建”。從文件類型列表中單擊“Microsoft 數據鏈接”。
        4. 重命名新文件 Northwind.MDL。
        5. 右鍵單擊文件并單擊上下文菜單上的“屬性”,以顯示“Northwind.MDLProperties”對話框。
        6. 單擊“連接”選項卡。
        7. 單擊“提供方”框并選擇“Microsoft Jet 3.51 OLE DB Provider”。
        8. 在Data Source 框中輸入nwind.mdb文件的路徑。
        9. 單擊“測試連接”,檢測連接。
        10. 如果連接通過,單擊“確定”。
        注意 也可以通過在“控制面板”中單擊“數據鏈接”圖標創建一個 OLE DB數據源。在“管理數據鏈接文件”對話框中,單擊“新建”創建一個新的數據源。
        使用 DataGrid 和 ADO Data控件創建一個簡單的數據庫應用程序
        只使用一個 DataGrid 和一個 ADO Data 控件,可以創建一個允許最終用戶閱讀和寫入記錄集的數據庫應用程序。
        要使用 ADO 數據控件來創建一個簡單的數據庫應用程序
        1. 為 Northwind 數據庫創建一個OLE DB 數據源。如果還沒有創建數據源,請按照“創建 Northwind 的OLE DB Data Link”中的步驟操作。
        2. 在Visual Basic 中創建一個新的標準的 EXE 工程。如果 DataGrid 控件不在“工具箱”中,則用右鍵單擊“工具箱”,然后使用“部件”對話框來添加控件。同時也載入 ADO 控件。
        3. 在空窗體上各放置控件的一個實例。
        4. 將 ADO 控件的ConnectionString 屬性設置為 Northwind 的數據源。單擊并選定該 ADO Data 控件,并按 F4 鍵出現“屬性”窗口。單擊“ConnectionString”,然后單擊 OLE DB File。單擊 Northwind 的數據源。
        5. 設置 ADO 控件的 RecordSource 屬性。在“屬性”窗口中,單擊“記錄源”并輸入一條 SQL 語句來填充 DataGrid
    控件。在本例中,輸入“Select * From Products”。
        6. 將 DataGrid 控件的 DataSource 屬性設置為這個 ADO Data 控件。單擊并選定該 DataGrid 控件。在其“屬性”窗口中,單擊“數據源”將出現一個包含所有數據控件的下拉列表——在本例中只有 ADO Data 控件。單擊這個控件。
        7. 按 F5 鍵運行這個工程。
        創建一個連接 DataList 控件的 DataGridData
        Grid 的通常用法是顯示數據庫的一個表所提供的“詳細內容”。例如,Northwind (Nwind.mdb) 數據庫包括兩個表,一個名為 "Suppliers",另一個名為 "Products"。在本例中,我們使用 DataList 控件來顯示 "Suppliers" 表中的供應商的公司名稱。當用戶單擊任意一個公司名稱時,這個 DataList 控件將提供該公司的 SupplierID。使用這個標識符,就可以構造一個查詢,在 "Products" 表中檢索具有相匹配的 SupplierID 的所有記錄。換句話說,當用戶單擊一個公司時(在 DataList 控件中),該公司生產的所有產品將出現在 DataGrid 控件中。
    要使用一個指定供應商的產品填充一個 DataGrid 控件
        1. 確認在機器上已為 Northwind 數據庫建立了一個OLE DB 數據源;如果還沒有創建這樣的一個數據源,請按照“創建 Northwind 的OLE DBData連接”的步驟操作。
        2. 在Visual Basic 中創建一個新的標準的 EXE 工程。
        如果 DataGrid、DataList 和 ADO Data 控件不在“工具箱”中,則右鍵單擊“工具箱”,然后單擊“部件”。在“部件”對話框中雙擊“MicrosoftDataGrid Control”、“Microsoft DataList Controls”以及“Microsoft ADOControl”。
        3. 在一個空窗體中各放置一個 DataGrid 和 DataList 控件的實例。將 DataList 控件放置在該窗體的左上角,然后將 DataGrid 控件放在它的下面的某處。
        4. 在窗體放置兩個 ADO Data 控件實例。選擇第一個 ADO Data 控件,并按 F4 鍵來顯示其“屬性頁”。將該控件的 Name 屬性設置為 adoSuppliers。選擇第二個 ADO Data 控件并將其 Name 屬性設置為 adoProducts。將第一個控件直接放在 DataList 控件的下面,把第二個控件直接放在 DataGrid 控件的下面。
        5. 將這兩個 ADO Data 控件的 ConnectionString 屬性設置為 Northwind的OLE DB 數據源。選擇名為 adoSuppliers 的控件,然后將其ConnectionString 屬性設置為Northwind 的OLE DB data source (Northwind.mdl)。選擇名為 adoProducts的控件,并重復該操作。
        6. 設置這兩個 ADO Data 控件的 RecordSource 屬性。選擇 adoSuppliers 并在其“屬性頁”上單擊“RecordSoure”。輸入 Select* From Suppliers。這個查詢將指示該 ADO Data 控件返回 Suppliers 表中的所有記錄。選擇 adoProducts,單擊“RecordSoure”,并輸入 Select *From Products。這個查詢將返回在 Products 表中的所有記錄。
        7. 將 DataList 控件的 RowSource 屬性設置為 adoSuppliers。
         RowSource 屬性決定由哪一個數據源為 ListField 屬性供應數據。
        8. 將 DataList 控件的 ListField 屬性設置為 CompanyName。
         ListField 屬性被設置成名為 Suppliers 的表中的字段名稱。在運行時,DataList 控件顯示在這個屬性中所指定的字段的值。在本例中,該屬性將顯示在 Suppliers 表中找到的一個公司名稱。
        9. 將 DataList 控件的 BoundColumn 屬性設置為 SupplierID。
         BoundColumn 屬性被設為 Suppliers 表中的第二個字段。在本例中,這個屬性就被設為 SupplierID 字段。當單擊 DataList 控件時,BoundText屬性返回與在 DataList 控件中所顯示的公司相關聯的 SupplierID 字段的值。這個值將用于對 Products 表的查詢,該查詢為 DataGrid 控件提供數據。
        10. 將 DataGrid 控件的 DataSource 屬性設置為 adoProducts。
         DataSource 屬性為該控件指定數據源。在本例中,該屬性被設置為名為adoProducts 的 ADO Data 控件,這將返回 Products 表中的所有記錄。
        11. 在窗體的代碼模塊中,添加下述內容:
          Private Sub Datalist1_Click()
          ' 聲明一個用來包含新查詢的字符串變量。這個新的
          ' 查詢使用 DataList 控件的BoundText屬性
          ' 來提供一個 SupplierID 值。新查詢查找所有
          ' 具有相同的 SupplierID 的產品。這個查詢被
          ' 指定給名為 adoProducts 的 ADO Data 控件
          ' 的 RecordSource 屬性。在刷新控件后,DataGrid
          ' 將使用包含由同一個公司供應的所有產品的新
          ' 記錄集來更新。
          Dim strQuery As String
          strQuery = "Select * FROM Products WHERE SupplierID = " & _
          Datalist1.BoundText
          With adoProducts
            .RecordSource = strQuery
            .Refresh
          End With
          With DataGrid1
            .ClearFields
            .ReBind
          End With
          End Sub
        12. 運行該工程。
        單擊 DataList 控件中的任意公司名稱,將自動用該公司所供應的產品更新 DataGrid 控件。

    使用列
        通過更改 DataSource 屬性,可以動態地更改在 DataGrid 控件中顯示的數據。例如,可以顯示同一個數據庫的不同表。如果這樣做,則 DataGrid 控件將只根據默認的屬性顯示數據。
        添加、刪除或隱藏列
        通過使用 Columns 集合和 Column 對象的屬性和方法,可以在程序中添加、刪除或隱藏列。
        添加和刪除一列
        要在運行時添加一列,可以使用 Add 方法。如果首先聲明一個變量,并將新對象賦給該變量,就可以用簡明的代碼設置各種屬性。
        Private Sub AddColumn()
          ' 在最右邊的位置添加一列。然后設置其 Visible、Width、
          ' Caption以及 Alignment 屬性。DataField 屬性則指定
          ' 該列將綁定到哪一個字段。
          Dim c As Column
          Set c = DataGrid1.Columns.Add(DataGrid1.Columns.Count)
          With c
           .Visible = True
           .Width = 1000
           .Caption = "我的新列"
           .DataField = Adodc1.Recordset.Fields("ProductName").Name
           .Alignment = dbgRight
          End With
        End Sub
        可以使用方法來刪除任意一列。請確保使用 ColIndex 參數來指定要刪除的列。下面的代碼將刪除被單擊的列。
        Private Sub DataGrid1_HeadClick(ByVal ColIndex As Integer)
           DataGrid1.Columns.Remove ColIndex
        End Sub
        隱藏一列
        通過將 Visible 屬性設置為 False,可以隱藏任意一列。當想要限制用戶可以查看或編輯的列時這一功能特別有用。下面的示例在 Columns 集合中循環,隱藏除少數列之外的所有列。
        Private Sub HideColumns()
          ' 使用 DataField 屬性來判別正在測試的是哪一列。
          ' 只顯示三列:ProductName、UnitPrice以及
          ' UnitsInStock。
          Dim c As Column
          For Each c In DataGrid1.Columns
             Select Case c.DataField
             Case "ProductName"
               c.Visible = True
             Case "UnitPrice"
               c.Visible = True
             Case "UnitsInStock"
               c.Visible = True
               c.Caption = "In Stock"    ' 更改這個列的標頭。
             Case Else             ' 隱藏其它所有的列。
               c.Visible = False
             End Select
          Next c
        End Sub
        操作 DataGrid 視圖
        一個“拆分”的網格使最終用戶對相同的數據可以擁有多個視圖。例如,假設有一個由十個字段組成的大表。在這種情況下,在控件中察看的記錄集將有十列寬,除非窗體非常寬,否則用戶將無法同時看見所有列的內容。,而且,假設用戶只對第一列和最后一列感興趣(例如,第一列是名字,最后一列是電話號碼)。為了能同時看到在兩端的列(不重新安排列的順序),可以對網格進行拆分。
        創建一個 Split 對象
        在設計時,可以創建一個拆分,具體步驟是:右鍵單擊網格,單擊“編輯”,再單擊右鍵,然后單擊“拆分”。通過右鍵單擊該控件,并單擊“屬性”來顯示“屬性頁”對話框,可以編輯這個拆分。可以使用“拆分”選項卡來自定義拆分。要刪除一個拆分,右鍵單擊該拆分,并單擊“刪除”。
        在運行時,最終用戶也可以通過單擊位于這個網格控件的左下邊的右邊的選項卡,以手工方式來拆分該網格(除非不允許這個操作),如下圖所示:
     
    默認情況下,DataGrid 控件包含一個 Split 對象。防止最終用戶添加拆分的代碼為:
        DataGrid1.Splits(0).AllowSizing = False
        在程序中添加和刪除拆分
        DataGrid 控件包含一個 Split 對象的集合。要在程序中添加拆分,可以使用 Add 方法,如下所示:
        DataGrid1.Splits.Add 1
        注意 Add 方法需要新的拆分索引作為其參數。要添加一個拆分,應將這個索引參數設置為 Splits 集合的 Count 屬性值。
        使用 Split 集合的 Add 方法,可以在程序中按照實際需要添加拆分。由于添加多于兩個以上的拆分將使網格很難使用,可以使用該集合的 Count 屬性來限制拆分的數目。
        If DataGrid1.Splits.Count < 3 Then ' 添加一個拆分。
           DataGrid1.Splits.Add DataGrid1.Splits.Count
        End If
        使拆分同步
        當拆分多于一個時,可能希望控制這些拆分如何滾動。例如,在一個具有三個拆分的網格中,可以決定只讓第一個和第三個拆分同步,而讓中間的拆分獨立地滾動。要同步任何兩個(或多個)拆分,只需將每個 Split 對象的 ScrollGroup 屬性設置為同一個值。
        ' 使第一個和第三個 Split 對象同步。
        With DataGrid1
          .Splits(0)
        .ScrollGroup = 1
        .Splits(1).ScrollGroup = 2
        .Splits(2).ScrollGroup = 1
        End With
        通過設置 Scrollbars 屬性,使同步的拆分組只顯示一個滾卷條,從而進一步自定義拆分的外觀。
        控制 Tab 鍵和箭頭鍵的行為
        使用 WrapCellPointer、TabAcrossSplits以及 TabAction 屬性,可以決定當最終用戶按下 tab 鍵或箭頭鍵時網格的行為。
        在這三個屬性中,TabAction 屬性級別最高,它決定 WrapCellPointer 和TabAcrossSplits 這兩個屬性是否能生效。TabAction 有三個設置值: ControlNavigation、Column Navigation 和 Grid Navigation。當該屬性設置為 ControlNavigation 時,按 Tab 鍵根據 TabIndex 將焦點切換到下一個控件。這一設置優先于 WrapCellPointer 和 TabAcrossSplits。
        WrapCellPointer 屬性決定在任何單個的拆分中 tab 鍵和箭頭鍵的行為。如果該屬性設置為 True,且當前單元位于最后一列,這時最終用戶按 tab 鍵則使第一列的下一行變成當前的單元。不過,如果當前單元位于最后一行的最后一列時,這時就沒有地方可以“換行”。
        TabAcrossSplits 屬性決定當網格中存在兩個或多個拆分時 tab 和箭頭鍵的行為。如果該屬性設置為 True,且當前單元位于任何一個拆分的最后一列,則按Tab或箭頭鍵將使當前單元“跳” 到下一個拆分的第一列。當前單元仍保持相同的行位置。
        注意 如果 WrapCellPointer 和 TabAcrossSplits 屬性都設置為 True,則只有當前單元位于最后一個拆分的最后一列時才會換行。這時當前單元將換到第一個拆分的第一列中的下一行。
        自定義列集合
        每一個 Split 對象都有一個 Columns 屬性,允許用戶來操作一個 Column對象的集合。通過這樣做,可以更改每個 Split 對象的外觀。例如,可以用一個拆分包含顯示姓氏字段和名字字段的兩個列,而第二個拆分則顯示電話字段和地址字段。要實現這一目標,需要將其它的每一列的 Visible 屬性設置為 False,如下所示:
        ' 枚舉 Columns 集合,對每一個 Column 對象的 DataField 屬性
        ' 進行測試。如果測試失敗,則隱藏這一列。
        Dim i As Integer
        ' 隱藏除 ProductName 列之外的所有列。
        For i = 0 To DataGrid1.Splits(0).Columns.Count - 1
          If DataGrid1.Splits(0).Columns(i).DataField <> "ProductName" Then
             DataGrid1.Splits(0).Columns(i).Visible = False
          End If
        Next i
        ' 隱藏除 UnitPrice 列之外的所有列。
        For i = 0 To DataGrid1.Splits(0).Columns.Count - 1
          If DataGrid1.Splits(1).Columns(i).DataField <> "UnitPrice" Then
             DataGrid1.Splits(1).Columns(i).Visible = False
          End If
        Next I
       使用 Bookmarks 和 SelBookmarks 跟蹤記錄
        Bookmarks 和 SelBookmarks 提供了標記記錄的一種手段。當編寫應用程序中的特定功能(諸如允許最終用戶手工地選擇多個不相鄰的記錄,進行所選記錄的大批更新)時,這就很有必要。在這些情形中,需要標記哪些記錄已被選擇,因此可以使用 SelBookmarks 集合及其屬性。
        有兩個函數,分別是 CellText 和 CellValue 方法,需要標記才能正確執行。
        標記用戶的選擇
        SelBookmarks 集合包含所有選定的記錄的書簽。當最終用戶手工選擇記錄時(即在單擊時按住 CTRL 鍵),每一個選定的記錄的書簽都會加入到該集合中。使用標準的循環,用戶可以知道已經選定了什么,也可以保存書簽(因為可能需要恢復某個值),以及執行操作:
        Dim i as Integer ' 計數器
        Dim intCount As Integer
        intCount = DataGrid1.SelBookmarks.Count - 1
        ReDim arrSelBK(intCount) ' 聲明用于保存書簽的數組。
        For i = 0 To intCount
          ArrSelBK(i) = DataGrid1.SelBookmarks(i)
          ' 在此處執行操作。如果該操作必須被
          ' 取消,則退出該循環,然后使用該數
          ' 組來取消這些更改。
        Next i
        通過在程序中添加到 SelBookmarks 集合來選擇記錄
        通過將記錄添加到這個集合,也可以在程序中選定記錄。例如,可能有一個顯示指定的客戶所有訂貨的網格。如果要高亮顯示該客戶花費超過 $100的所有記錄,則對記錄進行過濾,并將結果書簽添加到 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
        顯示計算結果字段
        假設在表中有一個名為 "Price" 的字段,并且想使用本地稅率來計算表中每一項的稅費。這就是一個計算結果字段,可以通過修改 DataSource 的查詢來計算這個值,并把這個值返回給 DataGrid 控件。
        要在 DataGrid 控件中創建一個計算結果字段
        1. 確認在機器上已為 Northwind 數據庫建立了一個OLE DB 數據源;如果還沒有創建這樣的一個數據源,請按照“創建 Northwind 的OLE DBData 連接”的步驟操作。
        2. 在窗體上放置一個 ADO Data 控件和一個 DataGrid 控件。
        3. 將 ADO Data 控件的ConnectionString 屬性設置為 Northwind 的數據源。
        4. 設置 ADO Data 控件的 RecordSource 屬性。在“屬性”窗口中,單擊“記錄源”并輸入 Select ProductName, UnitPrice,(UnitPrice * .082) As Tax From Products。
        5. 將 DataGrid 控件的 DataSource 屬性設置為這個 ADO Data 控件。
        6. 運行該工程。
        與類模塊一起使用 DataGrid 控件
        如果想要訪問以自定義格式或以 ODBC 驅動程序不直接支持的格式存放的數據,可以創建一個類來封裝該數據。然后可以編寫該類的自定義函數來檢索這些數據。這樣該類就變成了一種數據源,可以被任何數據使用者(如DataGrid 控件)使用。
        在這個類模塊的Initialize 事件中,首先通過聲明一個作為 New ADODB.Recordset的變量,來創建一個 ADODB recordset 對象。在創建了這個 recordset 對象后,再添加字段,每個數據源中的每個字段都要加入。然后使用合適的數據填充這個記錄集。
        注意 也可以使用 OLEDB 示例提供者來創建一個數據源。關于 OLEDB示例提供者的詳細信息,請參閱“創建帶有數據提供方的部件”。
        類模塊有一個 GetDataMember 事件,只要當數據使用者(諸如 DataGrid 控件)需要數據時就產生該事件。在這個事件中,Data 參數被設置為在Initialize 事件中所創建的 recordset 對象。
        如果要使用這個類模塊,應創建一個具有一個 DataGrid 控件的窗體。在該窗體的 Load 事件的代碼中,將該控件的 DataSource 屬性設置為這個類。
        注意 數據類模塊在設計時是不可用的。例如,如果使用 DataGrid 控件,則當用戶在“屬性”窗口中單擊“數據源”時,所有可用的數據源都會出現在一個下拉列表中。但其中不會有這個數據類模塊,它只能在代碼中設置。
        使用類模塊創建一個數據源
        下面的示例使用一個類模塊來創建一個簡單數據源。然后通過 DataSource屬性將 DataGrid 控件綁定到該模塊。
    要創建一個用于DataGrid 的類
        1. 創建一個新的標準 Exe 工程。
        2. 給窗體添加一個 DataGrid 控件。如果DataGrid控件不在“工具箱”中,則在“工程”菜單中單擊“部件”,
    再單擊“Microsoft DataGrid Control”,然后單擊“確定”。
        3. 在“工程”菜單中,單擊“引用”。在“引用”對話框中,單擊“MicrosoftActiveX Data Objects 2.0 Library”。
        4. 在“工程”菜單中,單擊“添加類模塊”來給工程添加一個數據類模塊。
        5. 在“工程資源管理器”窗口中,單擊并選定“類”圖標,并按 F4 鍵顯示“屬性”窗口。
        6. 在“屬性”窗口中,將類的名稱更改為NamesData。
        7. 在“屬性”窗口中,單擊“DataSourceBehavior”并將該屬性更改為vbDataSource。
        8. 在該類模塊的 Declarations 部分,創建一個 ADODB Recordset變量,如下所示:
        Option Explicit
        Private WithEvents rsNames As ADODB.RecordSet
        使用 WithEvents 關鍵詞來聲明該變量,使用戶可以對 RecordSet 對象的事件編程。
        9. 在該類的 Initialize 事件中,添加下述代碼:
        Private Sub Class_Initialize()
          ' 將新的數據成員的名稱添加到 DataMember 集合
          ' 這使其它對象可以看見這些可用的
          DataMembersDataMembers.Add "Names"
          Set rsNames = New ADODB.RecordSet    ' 設置對象變量。
          ' 創建一個具有兩個字段的 recordset,并打開該 recordset。
          ' 第一個記錄具有一個整數的數據類型,第二個記錄是一個最大可
          ' 達 256 個字符的字符串。CursorType 被設置為 OpenStatic
          ' —— 一個可更新的對一組記錄的快照。LockType 被設置為
          ' LockOptimistic,以允許對該 recordset 進行更新。
          With rsNames
            .Fields.Append "ID", adInteger
            .Fields.Append "Name", adBSTR, 255
            .CursorType = adOpenStatic
            .LockType = adLockOptimistic
            .Open
          End With
          Dim i As Integer
          For i = 1 to 10   ' 添加十條記錄。
            rsNames.AddNew
            rsNames!ID = i
            rsNames!Name = "Name " & i
            rsNames.Update
          Next i
          rsNames.MoveFirst ' 移到該記錄集的開始。
        End Sub
        這部分代碼首先創建 recordset 對象,然后給該對象添加兩個字段。代碼接著給 recordset 添加十條記錄。
        10. 在該類的 GetDataMember 事件中,添加下述代碼 :
        Private Sub Class_GetDataMember(ByVal DataMember As String, _
        Data As Object)
           Set Data = rsNames
        End Sub
        只要發生該事件——即當該類對象被綁定到一個數據使用者,如 DataGrid控件時,代碼將返回該 recordset 對象。
        11. 在 Form 對象的代碼模塊中,聲明一個數據類的對象變量:
        Option Explicit
        Private datNames As NamesData ' 類變量
        12. 在 Form 對象的 Load 事件的代碼中,將 DataGrid 控件的 DataSource設置為該類對象。
         Private Sub Form_Load()
           ' 創建一個新的 NamesData 對象
           Set datNames = New NamesData
           ' 將這個 DataGrid 綁定到新的數據源 datNames
           Set DataGrid1.DataSource = datNames
         End Sub
        13. 按 F5 鍵運行該工程。
        RecordSet事件的編程
        也可以對這個 Recordset 對象的事件進行編程。在該類模塊中,單擊“對象”框(在位于左上角),然后單擊“rsNames”。在“過程/事件”框(在右上角)中,下拉列表將顯示這個 Recordset 對象的所有事件。
        給類添加一個屬性
        類模塊也可以進行修改,來響應事件或函數調用。下面的代碼演示了如何先給類添加屬性。當從其它對象調用該對象時,這一屬性將返回該類的RecordCount。
        Public Property Get RecordCount() As Long
           RecordCount = rsNames.RecordCount
        End Sub
        使用 DataMember 屬性
        GetDataMember 事件也包括 DataMember 參數。使用這個參數,可以在類模塊中包括多個記錄集,并使用帶 DataMember 參數的 Select Case 語句來返回相應的記錄集:
        Private Sub Class_GetDataMember(ByVal DataMember As String, Data As _
        Object)
           Select Case DataMember
           Case "Names"
             Set Data = rsNames
           Case "Dates"
             Set Data = rsDates
           Case Else
             ' 設置一個默認的數據成員
             Set Data = rsYears
           End Select
        End Sub
        如果要指定所需的 DataMember,請將數據使用者的 DataMember 屬性設置為適當的字符串,然后如平常一樣設置 DataSource。對于 DataGrid 控件,可以采用如下方法:
        Private Sub Form_Load()
           ' 創建一個新的 NamesData 對象
           Set datNames = New NamesData
           ' 指定所需的 DataMember,然后設置 DataSource。
           DataGrid1.DataMember = "Names"
           Set DataGrid1.DataSource = datNames
        End Sub

    posted on 2008-11-26 07:19 大鳥 閱讀(315) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产成人免费高清激情视频| 国产精品视频免费观看| 免费**毛片在线播放直播| 亚洲中文字幕久久久一区| 99久久99久久精品免费看蜜桃 | 亚洲国产香蕉人人爽成AV片久久 | 精品免费AV一区二区三区| 性感美女视频在线观看免费精品| 一本色道久久综合亚洲精品蜜桃冫| 2021久久精品免费观看| 日本亚洲精品色婷婷在线影院| 一本无码人妻在中文字幕免费| 亚洲最大的成人网| 日本高清免费aaaaa大片视频| 激情小说亚洲色图| 亚洲国产一区二区视频网站| 国产精品永久免费| 久久精品国产亚洲AV麻豆王友容 | 女性自慰aⅴ片高清免费| 亚洲AV女人18毛片水真多| 免费乱码中文字幕网站| 国产福利免费视频| 亚洲一二成人精品区| 日韩一区二区a片免费观看| 久久精品亚洲日本波多野结衣| 亚洲AV成人精品日韩一区18p| 国内精品一级毛片免费看| 亚洲丝袜中文字幕| 麻豆国产入口在线观看免费| 人成午夜免费大片在线观看| 亚洲av丰满熟妇在线播放| 免费无码精品黄AV电影| 新最免费影视大全在线播放| 亚洲av无码片在线播放| 成人毛片手机版免费看| 久久国产乱子伦精品免费午夜| 亚洲va在线va天堂va手机| 亚洲欧洲自拍拍偷精品 美利坚 | 免费涩涩在线视频网| 国产A∨免费精品视频| 亚洲黄色中文字幕|