vb中datagrid控件的用法

时间:2021-11-28 08:52:37
  如何在vb中datagrid控件的第n行第m列获取焦点?或者当焦点在某一行某一列时,是焦点移到该行的下一列

5 个解决方案

#1


使用 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 视图”。

#2


赵四老师。我还是不懂你说的啊。。

#3


哈哈,估计他也不懂你说的。反正我是没懂。

#4


我的意思是说  如何把一个控件中的内容(比如text1.text)导入到datagrid控件的第3行第5列。。。毕竟新手。。个人感觉是焦点

#5


本帖最后由 bcrun 于 2016-05-30 16:39:15 编辑
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

#1


使用 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 视图”。

#2


赵四老师。我还是不懂你说的啊。。

#3


哈哈,估计他也不懂你说的。反正我是没懂。

#4


我的意思是说  如何把一个控件中的内容(比如text1.text)导入到datagrid控件的第3行第5列。。。毕竟新手。。个人感觉是焦点

#5


本帖最后由 bcrun 于 2016-05-30 16:39:15 编辑
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