如何在vb中datagrid控制元件的第n行第m列獲取焦點?或者當焦點在某一行某一列時,是焦點移到該行的下一列
uj5u.com熱心網友回復:
使用 DataGrid 控制元件DataGrid 控制元件是一種類似于電子資料表的系結控制元件,可以顯示一系列行和列來表示 Recordset 物件的記錄和欄位。可以使用 DataGrid 來創建一個允許最終用戶閱讀和寫入到絕大多數資料庫的應用程式。DataGrid 控制元件可以在設計時快速進行配置,只需少量代碼或無需代碼。當在設計時設定了 DataGrid 控制元件的 DataSource 屬性后,就會用資料源的記錄集來自動填充該控制元件,以及自動設定該控制元件的列標頭。然后您就可以編輯該網格的列;洗掉、重新安排、添加列標頭、或者調整任意一列的寬度。
在運行時,可以在程式中切換 DataSource 來察看不同的表,或者可以修改當前資料庫的查詢,以回傳一個不同的記錄集合。
注意 DataGrid 控制元件與 Visual Basic 5.0中的 DBGrid 是代碼兼容的,除了一個例外:DataGrid 控制元件不支持 DBGrid 的“解除系結模式”概念。DBGrid 控制元件包括在 Visual Basic 98 的 Tools 目錄中。
可能的用法
查看和編輯在遠程或本地資料庫中的資料。
與另一個資料系結的控制元件(諸如 DataList 控制元件)聯合使用,使用 DataGrid 控制元件來顯示一個表的記錄,這個表通過一個公共欄位鏈接到由第二個資料系結控制元件所顯示的表。
使用 DataGrid 控制元件的設計時特性
可以不撰寫任何代碼,只通過使用 DataGrid 控制元件的設計時特性來創建一個資料庫應用程式。下面的說明概要地說明了在實作 DataGrid 控制元件的典型應用時的一般步驟。完整的循序漸進的指示,請參閱主題“DataGrid 方案1: 使用 DataGrid 控制元件創建一個簡單資料庫應用程式”。
要在設計時實作一個 DataGrid 控制元件
為您希望訪問的資料庫創建一個 Microsoft 資料鏈接 (.UDL) 檔案。請參閱“創建 Northwind OLE DB 資料鏈接”主題,以獲得一個示例。
在表單上放置一個 ADO Data 控制元件,并將其 ConnectionString 屬性設定為在第 1 步中所創建的OLE DB 資料源。
在這個 Ado Data 控制元件的 RecordSource 屬性中輸入一條將回傳一個記錄集的 SQL 陳述句。例如,
Select * From MyTableName Where CustID = 12
在表單上放置一個 DataGrid 控制元件,并將其 DataSource 屬性設定為這個 ADO Data 控制元件。
右鍵單擊該 DataGrid 控制元件,然后單擊“檢索欄位”。
右鍵單擊該 DataGrid 控制元件,然后單擊“編輯”。
重新設定該網格的大小、洗掉、或添加網格的列。
右鍵單擊該 DataGrid 控制元件,然后單擊“屬性”。
使用“屬性頁”對話框來設定該控制元件的適當的屬性,將該網格配置為所需的外觀和行為。
在運行時更改顯示的資料
在創建了一個使用設計時特性的網格后,也可以在運行時動態地更改該網格的資料源。下面介紹實作這一功能的通常方法。
更改 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 控制元件的 Texr 屬性。
下一步
要閱讀關于使用該控制元件創建簡單的應用程式的一個循序漸進的程序,請參閱“使用 DataGrid 控制元件創建簡單的資料庫應用程式”,或“創建一個連接 DataList 控制元件的 DataGrid”。
要了解關于 Split 物件以及如何對其編程的詳細資訊,請參閱“操作 DataGrid 視圖”。
uj5u.com熱心網友回復:
趙四老師。我還是不懂你說的啊。。uj5u.com熱心網友回復:
哈哈,估計他也不懂你說的。反正我是沒懂。uj5u.com熱心網友回復:
我的意思是說 如何把一個控制元件中的內容(比如text1.text)匯入到datagrid控制元件的第3行第5列。。。畢竟新手。。個人感覺是焦點uj5u.com熱心網友回復:
Col、Row 屬性示例這個例子將“Here”放到當前單元中,然后把活動單元改變成第三行中的第三個單元,并且把“There”放到那個單元中。要嘗試這個例子,請使用“部件”對話框對工具框添加一個 MS Flex Grid 控制元件(在“工程”選單中,選擇“部件”,然后選定 Microsoft Flex Grid Control),然后在新表單中繪制一個網格。要運行該程式,請按 F5 鍵,然后再單擊該網格。
Private Sub Form_Load ()
MSFlexGrid1.Rows = 8 ' 設定行數和列數。
MSFlexGrid1.Cols = 5
End Sub
Private Sub MSFlexGrid1_Click ()
' 將文本放到當前單元中。
MSFlexGrid1.Text = "Here"
'將文本放到第三行,第三列。
MSFlexGrid1.Col = 2
MSFlexGrid1.Row = 2
MSFlexGrid1.Text = "There"
End Sub
下一個例子顯示出活動單元的位置以及當用戶選定一個單元或單元范圍時的選定范圍。注意,在選定一個范圍時,活動的單元并不改變。選定一個范圍,然后單擊表單使活動單元沿著選中范圍的周邊移動。注意,被選中的范圍并不改變。
要嘗試這個例子,請創建一個新工程,使用“部件”對話框(在“工程”選單中,選擇“部件”,然后檢查 Microsoft Flex Grid Control)添加一個 MS Flex Grid 控制元件,然后繪制一個 MS Flex Grid 和兩個標簽。 將代碼復制到宣告部分,然后按 F5 鍵運行這個程式。
Private Sub Form_Load ()
MSFlexGrid1.Cols = 6 ' 設定行數和列數。
MSFlexGrid1.Rows = 7
End Sub
Private Sub MSFlexGrid1_RowColChange ()
Msg = "Active Cell: " & Chr(64 + MSFlexGrid1.Col)
Mst = Msg & MSFlexGrid1.Row
Label1.Caption = Msg
End Sub
Private Sub MSFlexGrid1_SelChange ()
Msg = "Selection: " & Chr(64 + MSFlexGrid1.SelStartCol)
Msg = Msg & MSFlexGrid1.SelStartRow
Msg = Msg & ":" & Chr(64 + MSFlexGrid1.SelEndCol)
Msg = Msg & MSFlexGrid1.SelEndRow
Label2.Caption = Msg
End Sub
Private Sub Form_Click ()
' 每單擊一次表單,這一程序
' 就沿著選中
' 范圍的周邊移動活動單元。
Dim GR, GC As Integer
If MSFlexGrid1.Row = MSFlexGrid1.SelStartRow Then
If MSFlexGrid1.Col = MSFlexGrid1.SelEndCol Then
GR = 1: GC = 0
Else
GR = 0: GC = 1
End If
ElseIf MSFlexGrid1.Row = MSFlexGrid1.SelEndRow Then
If MSFlexGrid1.Col = MSFlexGrid1.SelStartCol Then
GR = -1: GC = 0
Else
GR = 0: GC = -1
End If
Else
If MSFlexGrid1.Col = MSFlexGrid1.SelStartCol Then
GR = -1: GC = 0
Else
GR = 1: GC = 0
End If
End If
MSFlexGrid1.Row = MSFlexGrid1.Row + GR
MSFlexGrid1.Col = MSFlexGrid1.Col + GC
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/75320.html
標籤:控件
