DataMode 属性

指定 DBGrid 是否以连结方式操作。该属性在运行时是不可用的。

说明

DataMode 属性可以设置为以下诸值之一：

常数	值	描述
dbgBound	0	DBGrid 显示来自连结数据源的可用数据
dbgUnbound	1	DBGrid 使用非连结模式控件事件来检索和更新已显示的数据
注意   以上常数只能用于比较，因为属性在运行时不可用。

DataMode 属性控制 DBGrid 控件如何处理数据。在非连结模式下，程序员需要负责维护数据，并在无连结事件请求数据时向 DBGrid 控件提供合适的数据。在连结模式下，使用 Data 控件的 Recordset 来自动检索和更新数据。

通常，当显示的数据没有存储在能被 Microsoft Jet Database Engine 存取的数据库中时，使用 DBGrid 控件的非连结模式。无论对于什么类型的可用数据，都可以使用非连结模式。例如，可以使用 DBGrid 控件的非连结模式显示从专有数据库表格得到的数据，或者可以用它来管理文本文件中被跟踪的数据。

注意   如果 DBGrid 连结到了数据源，将 DataMode 设为 1 会产生错误。


UnboundAddData 事件

向非连结模式 DBGrid 控件中增加一个新行时将发生这个事件。这个事件警告应用程序必须向其数据集中增加一行新数据。

语法

Private Sub object_UnboundAddData(rowbuf As RowBuffer, newrowbookmark As Variant)

UnboundAddData 事件语法有以下部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
rowbuf	包含检索到的数据行的 RowBuffer 对象。
newrowbookmark	每行数据唯一标识符的书签。
说明

要检索的行的数目由 RowCount 属性决定，在这个事件中它通常被设为 1，因为每次只能增加一行。

只有在 AllowAddNew 属性为 True 时才可以向数据集增加一行新数据。

RowBuffer 对象不必被完全移送，只需要包含那些被修改了的单元的项。因此，检查 RowBuffer 对象的 Value 属性，看是否有值为 Null 的列。对于为 Null 值的列，可以把 Column 对象的 DefaultValue 属性指定给数据集.

要取消 UnboundAddData 事件，可以把 RowBuffer 对象的 RowCount 属性设为 0。这告诉 DBGrid，增加的企图失败。这样就可以妥善地处理数据转换和权限不够的错误。

rowbuf 参数包含了要写到数据集中去的单独一行数据。在从这个事件返回之前，newrowbookmark 必须被设置为新加行的书签。


UnboundAddData 事件举例

这个例子解释了如何用 UnboundAddData 事件向数据库添加一行数据，在此例中数据库是一个简单的数组。

Private Sub DBGrid1_UnboundAddData(ByVal RowBuf As RowBuffer, NewRowBookmark As Variant)

Dim Col%

mTotalRows = mTotalRows + 1

ReDim Preserve UserData(MAXCOLS - 1, mTotalRows - 1)

'把书签设置为最后一行。

NewRowBookmark = mTotalRows - 1

'下面的循环向数据库中增加新记录。

For Col% = 0 To UBound(UserData, 1)

    If Not IsNull(RowBuf.Value(0, Col%)) Then

        UserData(Col%, mTotalRows - 1) = RowBuf.Value(0, Col%)

    Else

        '如果没有为列赋值，则使用

        '缺省值

        UserData(Col%, mTotalRows - 1) = DBGrid1.Columns(Col%).DefaultValue

    End If

Next Col%

End Sub


UnboundDeleteRow 事件

当非连结模式的 DBGrid 中的一行数据被删除时将发生这个事件。这个事件警告应用程序，必须从它的数据集中删除一行数据。

语法

Private Sub object._UnboundDeleteRow(bookmark As Variant)

UnboundDeleteRow 事件的语法有以下部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
bookmark	代表要删除的行的书签的值。
说明

bookmark 参数必须被设为在该行被 UnboundReadData 事件检索或由 UnboundAddData 事件增加时提供的值。

要取消 UnboundDeleteRow 事件，可以将 bookmark 参数设为 Null，这将防止行被删除。


UnboundDeleteRow 事件举例

这个例子解释了如何使用 UnboundDeleteRow 事件从数据库中删除一行数据，在此例中数据库是一个简单的数组。

Private Sub DBGrid1_UnboundDeleteRow(Bookmark As Variant)

Dim Col%, Row%

'将数组中所有在被删除的行上面的行移动到

'下面。

For Row% = Bookmark + 1 To mTotalRows - 1

    For Col% = 0 To MAXCOLS - 1

        UserData(Col%, Row% - 1) = UserData(Col%, Row%)

    Next Col%

Next Row%

mTotalRows = mTotalRows - 1

End Sub


UnboundReadData 事件

在非连结模式的 DBGrid 控件需要数据进行显示时发生，例如在滚动 DBGrid 显示时。

语法

Private Sub object._UnboundReadData(rowbuf As RowBuffer, startlocation As Variant, readpriorrows As Boolean)

UnboundReadData 事件语法有以下部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
rowbuf	将包含检索到的数据的 RowBuffer 对象。如果输入该事件，RowCount 属性将包含要检索的行的数目。
startlocation	变体书签，它指定了在取下一个或前一个记录集合之前要定位的行。如果 readpriorrows 是 False，则 startlocation 在第一个要读的记录前指定书签。如果 readpriorrows 是 True，则 startlocation 在第一个要读的记录后面指定书签。如果 startlocation 为空，那么取将发生在从数据集开头的第一个或最后一个记录上，这取决于 readpriorrows 参数。
readpriorrows	如果网格请求 startlocatio 之前的行，为 True。如果网格在 startlocation 之后请求行则为 False。
说明

一旦数据被检索出来，它将存储在 DBGrid 控件的高速缓存中。

不需要完全填满行缓冲区，事实上根本不返回行也是可以接受的。RowBuffer 对象的 RowCount 属性可能被设置，指明返回的行比请求的要少。DBGrid 把这解释为在指定方向上没有更多的行可以检索。这样，只需要在有更多有效行可被检索时才可能填满行缓冲区。可以把 RowBuffer 对象的 RowCount 属性设置为 0，向 DBGrid 提示 BOF/EOF 和错误条件。

对于检索得到的每一行都必须提供一个书签，以后可以用它来指代该行。该书签通过为返回的每一行设置 RowBuffer 对象的 Bookmark 属性来指定。数据本身通过为返回的每一行的每一列数据设置 RowBuffer 对象的 Value 属性来指定。


UnboundReadData 事件举例

这个例子解释如何使用 UnboundReadData 事件从数据库中读一行数据，在此例中数据库是一个简单的数组。

Private Sub DBGrid1_UnboundReadData(ByVal RowBuf As RowBuffer, StartLocation As Variant, ByVal ReadPriorRows As Boolean)

Dim CurRow&, Row%, Col%, RowsFetched%, Incr%

If ReadPriorRows Then

    Incr% = -1

Else

    Incr% = 1

End If

'如果 StartLocation 是 Null 则在

'数据集的末尾或开头开始读

If IsNull(StartLocation) Then

    If ReadPriorRows Then

        CurRow& = RowBuf.RowCount - 1

    Else

        CurRow& = 0

    End If

Else

    '根据 StartLocation 书签和 lngIncr% 变量，

    '找到开始读的位置

    CurRow& = CLng(StartLocation) + Incr%

End If

'将数据从我们的数据集传递到 DBGrid 用来

'显示数据的 RowBuf 对象中

For Row% = 0 To RowBuf.RowCount - 1

    If CurRow& < 0 Or CurRow& >= mTotalRows& Then Exit For

    For Col% = 0 To UBound(UserData, 1)

        RowBuf.Value(Row%, Col%) = UserData(Col%, CurRow&)

    Next Col%

    '使用 CurRow& 来设置书签

    'CurRow& 也是我们的数组索引

    RowBuf.Bookmark(Row%) = CStr(CurRow&)

    CurRow& = CurRow& + Incr%

    RowsFetched% = RowsFetched% + 1

Next Row%

RowBuf.RowCount = RowsFetched%

End Sub


UnboundWriteData 事件

在非连结模式的 DBGrid 控件有一整行修改了的数据要写到数据集中时发生。它警告应用程序它必须把已有的已编辑的一行数据更新到它的数据集中。

语法

Private Sub object._UnboundReadData(rowbuf As RowBuffer, writelocation As Variant)

UnboundWriteData 事件的语法有以下部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
rowbuf	包含修改了的数据的 RowBuffer 对象。
writelocation	标识代表该行数据的唯一的书签值，书签在 UnboundReadData 和 UnboundWriteData 事件中指定。
说明

RowBuffer 对象的 RowCount 属性值将一直是 1，因为一次只能更新一行数据。

RowBuffer 对象可能不被完全移送，而只需要移送那些被修改了的单元的项。因此，要检查 RowBuffer 对象的 Value 属性，看是否有值为 Null 的列。

如果要取消 UnboundWriteData 事件，可以将 RowBuffer 对象的 RowCount 属性设置为 0。这会通知 DBGrid 写操作失败。这样，就可以妥善地处理数据转换和权限不够的错误.


UnboundWriteData 事件举例

这个例子说明了使用 UnboundReadData 事件从一个数据库中读取一行数据的方法，本例的数据库是一个简单的数组。

Private Sub DBGrid1_UnboundWriteData(ByVal RowBuf As RowBuffer, WriteLocation As Variant)

Dim Col%

'更新数据集数组中的每一列

For Col% = 0 To MAXCOLS - 1

 ' 仅更新被修改的列

    ' 否则，值被设为 NULL

    If Not IsNull(RowBuf.Value(0, Col%)) Then

        UserData(Col%, WriteLocation) = RowBuf.Value(0, Col%)

    End If

Next Col%

End Sub


RowBuffer 对象

RowBuffer 对象用于包含一行或几行检索数据，并在应用程序和非连结模式 DBGrid 控件间传递数据。

注意   RowBuffer 对象不是一个能被其它应用程序使用的派生对象。它是一个仅能被非连结模式 DBGrid 控件使用的内部类。

语法

DBGrid.RowBuffer

说明

RowBuffer 在下列情形下被使用：

•	放有一行或几行数据的 RowBuffer 对象作为参数传送到 UnboundReadData 事件中，DBGrid 用它填充数据缓冲区。

•	当 DBGrid 中的数据进行更新时，RowBuffer 对象被传送到 UnboundWriteData 事件中。一次仅有一行数据被更新，被更新的行由检索时赋予的原始书签标识。

•	当新行被加入时，新加入的数据被放入 RowBuffer 对象，并被传送到 UnboundAddData 事件中。

在所有的这些情况中，RowBuffer 对象由非连结模式 DBGrid 控件传送至用户。程序员和应用程序需要负责把这些数据加入到数据集中（由 UnboundReadData 事件传送），或者更新数据集中已有的数据（由 UnboundWriteData，UnboundAddData，或者 UnboundDeleteRow 事件传送）。


Bookmark 属性 (DBGrid)

返回或设定非连结模式 DBGrid 控件的 RowBuffer 对象的指定数据行的书签。

语法

object.Bookmark (row) [= value]

Bookmark 的属性语法由下列部分组成：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
row	指定放置书签的数据行的整数值。该值的范围为 0 到 RowCount-1。
value	表示指定 Line 的书签的变体。
说明

使用 Bookmark 属性返回的值来保存对当前行的引用，甚至在另一行变成当前行时，原当前行仍有效。

当您在代码中将 Bookmark 属性设置成有效值时，与该值相联结的行将变成当前行，而网格则调整其显示，使得在必要时得以看到新的当前行。

将将 Bookmark 属性定义成一个变体，以适合用户定义的未绑定模式下的书签。.

在 UnboundReadData 事件中，可能有多个数据行，所以必须给每一行提供一个书签。

UnboundWriteData 事件传送一个书签，用来标识待更新的数据行。

UnboundAddData 事件传送一个书签，用来标识要加入的数据行。

注意   在未绑定模式下将 Bookmark 属性设置成自身，这样将强行通过 UnboundWriteData 事件更新当前行。


Bookmark 属性 (DBGrid) 实例

这个例子中，当用户删除非连结模式 DBGrid 控件的一行数据时，UnboundDeleteRow 事件被触发，允许用户数据集手工删除该行，在本例中数据库是一个简单数组。下面的代码片断说明，如何在 UnboundDeleteRow 事件中将书签作为参数来传递，标识要删除的行。

Private Sub DBGrid1_UnboundDeleteRow(Bookmark As Variant)

    For i% = Bookmark + 1 To RowCount - 1

        For j% = 0 to MAXCOLS - 1

            UserData(j%, I% - 1) = UserData(j%, I%)

        Next j%

    Next I%

End Sub

Bookmark 属性赋值的例子，请参考 boundReadData 事件举例。


ColumnName 属性

返回非连结模式 DBGrid 控件的 RowBuffer 对象的指定列的名字。

语法

object.ColumnName (column)

ColumnName 属性的语法由下列部分构成：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
column	指定需要名字的列的字符串。
说明

用来获得指定列的名字。


ColumnCount 属性

返回非连结模式 DBGrid 控件的 RowBuffer 对象中列的数目。

语法

object.ColumnCount

object 所在处代表了对象表达式，其值是“应用于”列表中的对象。


RowCount 属性

返回或设置非连结模式 DBGrid 控件的 RowBuffer 对象中行的数目。

语法

object.RowCount [= number]

RowCount 属性的语法由下列部分组成：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
number	指示行数的长整数。
说明

在 UnboundWriteData 事件中，这个属性指示了将被写的行数，并且总是被设置为 1，因为一次只能写一行数据。可以把这个属性的值设置为 0，表示写操作失败。

在 UnboundAddData 事件中，该属性总是被置为 1，因为一次只能加入一行数据。可以把这个属性的值设置为 0，表示加入操作失败。

在 UnboundReadData 事件中，该属性指示了被要求填充的行数。在填充行之后，需要把 RowCount 设置为实际存储在 RowBuffer 对象中的行数。


RowCount 属性举例

在这个例子中，RowCount 属性被用于处理 RowBuffer 对象中的正确行数。

For Row% = 0 To RowBuf.RowCount - 1

' 处理 RowCount 行

Next Row%


Value 属性 (RowBuffer)

返回或设置非连结模式 DBGrid 控件的 RowBuffer 对象中的数据项的值。

语法

object.Value (row, column) [= value]

Value 属性的语法由下列部分组成：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
row	范围从 0 至 RowCount-1 的整数，指示项的行号。
column	指定项列号的整数，取值范围为 0 至 ColumnCount-1。
value	由 row 和 column 指定的单元中输入或显示的变体值。
说明

RowBuffer 能包含多行和多列数据。

在 UnboundWriteData 和 UnboundAddData 事件中，用户向非连结模式 DBGrid 控件中输入 Value 属性的设置。然后，用户就可以使用这些值更新数据库。

在 UnboundReadData 事件中，必须提供非连结模式 DBGrid 控件需要的 row 和 column 参数值。


Value 属性 (RowBuffer) 举例

这个例子说明了如何把一个先前读入的、包含在 Value 属性中的行加入到数据库中，在本例中，数据库是一个简单的数组。在下面的代码片断中，如果 RowBuffer 对象包含一行 (Not IsNull)，那么这行被写入到数组中。

For i% = 0 To MAXCOLS - 1

   If Not IsNull(RowBuf.Value(0, i%)) Then

      UserData(i%, RowCount - 1) = RowBuf.Value(0, i%)

   End If

Next i%


DBGrid 控件常数

Alignment（对齐）常数

常数	值	描述
dbgLeft	0	左对齐。
dbgRight	1	右对齐。
dbgCenter	2	中间对齐。
dbgGeneral	3	普通方式。
Borderstyle 常数

常数	值	描述
dbgNoBorder	0	无边线。
dbgFixedSingle	1	单实线。
Datamode 常数

常数	值	描述
dbgBound	0	有连接。
dbgUnbound	1	非连结模式。
Dividerstyle 和 RowDividerStyle（分割线和行分割线风格）常数

常数	值	描述
dbgNoDividers	0	没有分割线。
dbgBlackLine	1	黑线。
dbgDarkGrayLine	2	暗灰线。
dbgRaised	3	凸起。
dbgInset	4	凹陷。
dbgUseForeColor	5	前景色。
Error（错误）常数

常数	值	描述
dbgADDCELLCOND	6252	添加单元条件错误
dbgADDERROR	6154	试图添加记录时的错误
dbgAPPLYSTYLE	6254	应用式样错误
dbgBADEVENT	6161	操作在事件中无效
dbgBADSELRIDX	6150	无效选定行书签索引
dbgBINDERROR	4097	不能初始化数据绑定
dbgBMPTOOLARGE	6255	位图太大
dbgCAPTOOLONG	6164	标题文本太长
dbgCNOTFOUND	6147	未找到列
dbgCOLDATA	6156	在更新字段时数据类型不匹配
dbgCOLINDEX	6145	无效列索引
dbgDATAACCESS	6160	数据访问错误
dbgDELERROR	6155	试图删除记录时的错误
dbgDELMULTROWS	6159	不能删除多行
dbgDUPSTYLE	6248	复制式样名称
dbgFIELDERR	6158	非有效字段名称
dbgINCOMPAT	6157	不与列数据类型兼容的数据类型
dbgINVBOOKMARK	6149	无效书签
dbgINVPROPVAL	4098	属性的无效设置
dbgINVROWNUM	6148	无效行号
dbgINVSBSTYLE	6152	ScrollBars 属性的无效设置
dbgNOCURREC	6163	无当前记录
dbgNOPROPNOW	6162	在该上下文中属性不可用
dbgNOTINIT	6146	控件未正常初始化
dbgREMSTYLE	6251	删除式样错误
dbgSCROLLRANGE	6151	滚动参数出界
dbgSPLITINDEX	6244	无效拆分索引
dbgSTYLEERR	6249	访问式样错误
dbgSTYLEINDEX	6247	无效式样索引
dbgSTYLENAME	6253	无效式样名称
dbgUPDERROR	6153	试图更新记录时的错误
dbgUPDSTYLE	6250	更新式样错误
dbgVITEMERR	6246	访问值项错误
dbgVLINDEX	6245	无效值列表索引
Scroll Bar（滚动条）常数

常数	值	描述
dbgNone	0	无滚动条。
dbgHorizontal	1	水平滚动条。
dbgVertical	2	垂直滚动条。
dbgBoth	3	两种滚动条同时存在。
dbgAutomatic	4	自动方式的滚动条。


Column 对象

Column 对象代表在 DBGrid 控件中的一列。

说明

使用 Column 对象的方法和属性操作 DBGrid 控件中的一列。使用 Column 对象修改列头和列本身的属性。

为了使用 Column 对象，或者直接使用 DBGrid 控件的 Columns 属性，或者把每一列赋值给单独的变量，这些变量被作为 Column 对象指定了大小。下面举例说明后一种情况:

Dim Col1, Col2 as Column

Set Col1 = DBGrid1.Columns(0)

Set Col2 = DBGrid1.Columns(1)

Col1.Caption = "Column 1"

Col2.Caption = "Column 2"

如果在 DBGrid 控件中经常引用列，可以用上述方法，把值赋给列，而不是用诸如下例中的 Columns 属性，从而提高性能。

DBGrid1.Columns(0).Caption = "Column 1"


Columns 集合

Columns 集合包含 DBGrid 控件中所有保存的 Column 对象。

语法

Columns(index)

Columns.Item(index)

说明

能用 Columns 集合的属性和方法增加和删除 Column 对象，计算在 Columns 集合中列的数目，给 Columns 集合中的每个列定址。

可以通过 DBGrid 控件的 Columns 属性访问Columns 集合。


DBGrid 控件

显示并允许对代表 Recordset 对象中记录和字段的一系列行和列的数据进行操作。

语法

DBGrid

说明

数据觉察的 DBGrid 控件和 Grid 控件相似；然而，能把 DBGrid 控件的 DataSource 属性赋值给 Data 控件使该控件自动填充同时列头由 Data 控件的 Recordset 对象自动设置。DBGrid 实际上是固定列的集合，每一列由不定数目的行组成。

每个 DBGrid 控件单元能记录文本值，但不是链接的或嵌入的对象。可以在代码中指定当前单元，或用户在运行时用鼠标或单元箭头键改变当前单元。可以通过键入单元或通过程序修改。单元可以单独或按行选中。

如果单元的文本太长以至不能在单元中显示，文本会换行到同一单元的下一行。要显示换行的文本，必须增加单元的 Column 对象的 Width 属性与/或 DBGrid 控件的 RowHeight 属性。在设计时，能通过改变列的大小或改变列 Column 对象属性页中列的宽度来交互地改变列宽。

用 DBGrid 控件的列 Columns 集合的 Count 属性和 Recordset 对象的 RecordCount 属性确定控件中的行和列的数目。DBGrid 控件能拥有约 1700 列和多达系统资源能够支持的数目的行。

当选择一个单元时，ColIndex 属性被设置，因此在 DBGrid 控件的列 Columns 集合中选择一个 Column 对象。Column 对象的 Text 和 Value 属性引用当前单元的内容。当前行的数据能用 Bookmark 属性访问，它提供了对基本 Recordset 对象的记录进行访问，其设置都与其它列无关。DBGrid 控件的每一列都有自己的字体，边界，字换行，颜色和其它属性。在设计时，能设置列的宽度和行高度并建立用户看不可见的列。也能阻止用户在运行程序时改变格式。

注意   如果在设计时设置任何的 DBGrid 列属性，那么为了维护当前的设置就需要设置所有的列。


Caption 属性（DBGrid 和 Column 对象虚设主题）


Enabled 属性（DBGrid 虚设主题）


Font 属性（DBGrid 虚设主题）


BackColor 属性（DBGrid 虚设主题）


ForeColor 属性（DBGrid 虚设主题）


Text 属性（Column 对象虚设主题）


Locked 属性（Column 对象虚设主题）


SelBookmarks 集合

SelBookmarks 集合包含在 DBGrid 控件中选择的每一行的书签。

语法

SelBookmarks

说明

用 DBGrid 控件的 SelBookmarks 属性返回 SelBookmarks 集合。按照选中的顺序将书签加入 SelBookmarks 集合。可以通过把 Bookmark 属性设成在 SelBookmarks 集合中一个选定的书签来重新定位 DBGrid 控件的当前记录指针。

用 Add 方法向 SelBookmarks 集合中添加书签。一旦书签添加到 SelBookmarks 集合中，它在 DBGrid 控件中表现为被选中。

用 Remove 方法从 SelBookmarks 集合中删除书签。一旦书签从 SelBookmarks 集合中删除，它在 DBGrid 控件中不再表现为被选中。

SelBookmarks 集合支持 Add 和 Remove 方法以及 Count 属性。用这些方法和属性，可以操作在 DBGrid 控件中选中的项目列表。例如，能用 Add 方法通过编程选择附加项或用 Count 属性确定选中项目的数目。


Split 对象

Split 对象表示 DBGrid 控件中的一个拆分。

说明

DBGrid 支持那些类似 Excel 的拆分，这些拆分把网格分成垂直窗格，以便为数据库提供不同视图。每个拆分都用 Split 对象来表示，而且还包含一组逐列滚动的彼此相邻的列。按照缺省规定，当创建 DBGrid 对象时，它将包含一个 Split 对象。

可以使用拆分在多个垂直窗格中表示数据。数据窗格（或拆分）可用不同颜色和字体来显示数据。它们可以一起（垂直）滚动或相互独立地滚动，也可以显示相同的或不同的列。还可用拆分来固定一列或多列，使之不能滚动。与其它网格产品不同，不必把已固定的列放在网格的左边，而是可以放在右边或中间的任何位置上。一网格中甚至还可以有多组固定的列。

每个 Split 对象都拥有自己的 Columns 集合。这些独立的拆分和列提供了功能很强，又极为灵活的数据表示能力。

如上所述，最初网格（DBGrid 对象）只包含一个拆分。如果创建了额外的拆分，则可象如下示例那样用 Split 属性来确定或设置当前拆分（就是已接收到焦点的那个拆分）：

'读当前拆分的索引，这个索引是从零开始算起的

Variable% = DBGrid1.Split

'把焦点设置到拆分处，拆分的索引等于

' Variable%

DBGrid1.Split = Variable%

网格中的每个拆分都是同一数据源的一个不同视图，每个拆分的性能都与一个独立的网格相似。如果没有定制拆分的任何属性而创建额外的 Split 对象，则所有的拆分将是等同的，而且每个拆分的性能都与原来那个具有拆分的网格相似。

DBGrid 控件的某些属性与 Split 对象的属性相同，所以可看作二者共有的。改变 DBGrid 控件的普通属性也会使当前 Split 对象的相同属性发生变化，反之亦然。例如，对具有两个拆分的网格，假定当前拆分索引为 1（也就是将网格的 Split 属性设置为 1）。如果想确定正在使用的字幕样式，则可注意到，下列语句是等价的：

marquee% = DBGrid1.MarqueeStyle

marquee% = DBGrid1.Splits(1).MarqueeStyle

如果将当前拆分索引设置为 1，则把 MarqeeStyle 属性设置为 dbgSolidCellBorder 下列代码是等价的：

DBGrid1.MarqueeStyle = dbgSolidCellBorder

DBGrid1.Splits(1).MarqueeStyle = dbgSolidCellBorder

注意   对 DBGrid 对象及与它关联的 Split 对象来说，公共属性是唯一的。再没有一对对象具有如此相似的关系。


Splits 集合（Splits Collection）

Splits 集合包含所有存储在 DBGrid 控件中的 Split 对象。

语法

Splits(index)

Splits.Item(index)

说明

在设计时，可用网格的 UI 活动上下文菜单来创建拆分。在运行时，则可用 Splits 集合的 Add 和 Remove 方法来创建和删除拆分。每种方法都对拆分索引从零算起。下列代码对运行时添加和删除拆分进行演示：

'创建索引为 0 的拆分对象

DBGrid1.Splits.Add 0

'删除索引为 1 的拆分对象

DBGrid1.Splits.Remove 1

可用 Splits 集合的 Count 属性来确定网格中拆分数目。


Split 对象，Splits 集合示例（Split Object, Splits Collection Example）

下例把新的固定拆分添加到 DBGrid 控件中。要试用此例，将 Data 控件和 DBGrid 控件添加到新的标准 EXE 工程的窗体中。把 Data 控件的 DatabaseName 属性和 RecordSource 属性设置成 "BIBLIO.MDB" 和 "AUTHORS"。将下列代码粘贴到窗体的一般声明部分：

Private Sub Form_Load()

'在修改网格属性之前，务必

'刷新数据控件，以初始化该

'网格。

Data1.Refresh

'创建额外拆分：

DBGrid1.Splits.Add 0 ' Create an additional split

'将最左边的拆分 Splits(0) 中的所有列

'隐藏起来，第 0 列和第 1 列除外

Dim Cols As Columns, C As Column

Set Cols = DBGrid1.Splits(0).Columns

For Each C In Cols

C.Visible = False

Next C

Cols(0).Visible = True

Cols(1).Visible = True

'Splits(0) 进行配置，使之恰好显示

'两列，并禁止调整大小

With DBGrid1.Splits(0)

.SizeMode = dbgNumberOfColumns

.Size = 2

.AllowSizing = False

End With

'通常，如果固定拆分中的第 0 列和第 1

'列，使之不能在拆分中滚动，也就是希望不要

'在其它拆分中看到它们：

Set Cols = DBGrid1.Splits(1).Columns

Cols(0).Visible = False

Cols(1).Visible = False

'关闭拆分 1 中的记录选择器：

DBGrid1.Splits(1).RecordSelectors = False

End Sub


AfterColEdit 事件（AfterColEdit Event）

在完成网格单元中的编辑之后出现。

语法

Private Sub object_AfterColEdit([ index As Integer,] ByVal colindex As Integer)

AfterColEdit 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
Index	Interger，它标识控件数组中的一个控件。
colindex	Interger，它标识已编辑过的列。
说明

当完成网格单元中的编辑时，比如当按 Tab 键而切换到同一行的另外一列时按了 ENTER 键，或者单击了另外一个单元时，都将执行 BeforeColUpdate 和 AfterColUpdate 事件，并且可将单元的数据移动到网格的复制缓冲区中。AfterColEdit 事件紧随 AfterColEdit 事件出现。

在格单元中完成时，即使未对单元进行改动，或是已经取消了 BeforeColUpdate 事件，也会触发该事件。

如果取消 BeforeColEdit 事件，就不会启动 AfterColEdit 事件。


BeforeColEdit 事件

仅在键入字符而进入编辑模式之前出现该事件。

语法

Private Sub object_BeforeColEdit([ index As Integer,] ByVal colindex As Integer, ByVal keyascii As Integer, cancel As Integer)

BeforeColEdit 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
Index	Interger，它标识控件数组中的一个控件。
colindex	Interger，它标识已编辑过的那一列。
keyascii	Interger，对于用户为启动编辑而键入的字符，它表示这些字符的 ANSI 键代码。如果用户通过单击鼠标来启动编辑，则它取值为 0。KeyAscii 按值而不是地址来传递；所以不能通过改变其值，使得可用不同字符启动编辑。
cancel	Interger，可将其设置为 True，以防止用户编辑该单元，参见“设置值”中的描述。
设置值

cancel 的设置值为：

设置值	描述
True	单元不进入编辑模式。
False	（缺省值） ColEdit 事件立即被引发，如果 KeyAscii 参数不为零，则 Change 和 KeyUp 事件将随后出现。
说明

如果没有使用浮动编辑器字幕，那么，当用户单击当前单元或双击另一个单元时也会出现此事件。

可用该事件控制每个单元的可编辑性，或将最初的击键值转换成缺省值。

注意   如果没有使用浮动编辑器字幕，则 keyascii 参数只能为 0。


ButtonClick 事件（DBGrid 控件）

在单击当前单元的内置按钮时出现该事件。

语法

Private Sub object_ButtonClick([ index As Integer,] ByVal colindex As Integer)

ButtonClick 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
Index	Interger，它标识控件数组中的一个控件。
colindex	Interger，它标识其按钮被单击了的列。
说明

当把内置按钮的 Button 属性设置为 True 时，内置按钮对列有效。

一般来说，在想放下一个 Visual Basic 控件（如内置的组合框、被绑定的列表框，甚至另一个 DBGrid 控件）来进行编辑或数据录入时，应启动该列按钮。单击当前单元中的按钮时将会引发 ButtonClick 事件。然后可编写代码，从该单元放下所需控件。


ColEdit 事件

在键入字符，使单元第一次进入编辑模式时出现该事件。

语法

Private Sub object_ColEdit([ index As Integer,] ByVal colindex As Integer)

ColEdit 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
Index	Interger，它标识控件数组中的一个控件。
colindex	Interger，它标识被编辑过的列。
说明

如果没有使用浮动编辑器字幕，那么，当用户单击当前单元或双击另一单元时也会出现该事件。

只有在未取消 BeforeColEdit 事件时，ColEdit 事件才紧跟在 BeforeColEdit 事件后出现。

当在网格单元中完成编辑时，比如当 Tab 切换到同一行的另外一列时按 ENTER 键，或单击另外一单元，如果数据已被改变，则将执行 BeforeColUpdate 和 AfterColUpdate 事件。随后，引发 AfterColEdit 事件，表明已完成编辑。


Error 事件（DBGrid控件）

该事件由于数据访问错误而出现，而在没有执行 Visual Basic 代码时就会产生这个错误。

语法

Private Sub object_Error([ index As Integer,] ByVal dataerror As Integer, response As Integer)

Error 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
Index	Interger，它标识控件数组中的一个控件。
dataerror	Interger，它标识已出现的错误。
response	Interger，将其设置为 0，就可不显示错误信息，参见“设置值”中的描述。
设置值

response 的设置值为：

设置值	描述
0	不显示错误消息。
1	（缺省值）显示与错误关联的消息。
说明

即使应用程序在代码中处理了运行时错误，但在未执行代码时，错误也仍将出现，比如在单击 Data 控件按钮时，或在通过与被绑定的控件交互作用，以改变当前记录的时候。如果这样的一个操作导致了数据访问错误，则将引发 Error 事件。

不为该事件添加代码，这等效于将 response 参数设置为 0。

注意   用 ErrorText 属性来检索要显示的错误字符串。


OnAddNew 事件

在用户操作调用 AddNew 操作时出现。

语法

Private Sub object_OnAddNew([ index As Integer])

OnAddNew 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
index	Interger，它标识控件数组中的一个控件。
说明

当使用下列几种方式启动 AddNew 操作时将出现 OnAddNew 事件：

•	在 AddNew 行中修改单元。一般来说，键入一个字符就会出现该事件，但也会由于选定一个内置的单选钮或组合框而使这个事件出现。

•	当 AddNew 行包含当前单元时，在代码中设置一列的 Value 或 Text 属性。

可用绑定模式或解除绑定模式引发该事件。但是，只有当网格的 AllowAddNew 属性为 True 时才会引发该事件。

当 OnAddNew 事件点火时，AddNewMode 属性取值为 2（AddNew 挂起）。


SelChange 事件（DBGrid 控件）

当用户选定一个不同范围行或列时出现该事件。

语法

Private Sub object_SelChange([ index As Integer,] cancel As Integer)

SelChange 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
index	Interger，它标识控件数组中的一个控件。
cancel	布尔表达式，它决定是否取消更改，参见“设置值”中的描述。
设置值

cancel 的设置值为：

设置值	描述
True	如果事件过程把 Cancel 参数设置为 True，则前面选定的多个行和列（如果有的话）将被保存起来，而 SelStartCol、SelStartCol 和 SelBookmarks 属性都恢复成以前的值。
False	（缺省值）承认改动，继续。
说明

在以下几种情况中将会触发：

•	单击单独一行的记录选择器来选定这一行。

•	按 CTRL 键并单击一行的记录选择器，将该行添加到已选定的行的列表中。

•	单击单独一列的标头来选定该列。

•	在标头行中将已选定的一组列拖动到相邻列来改变这组列。

•	按 SHIFT 键并单击一个尚未被选定的列的标头，以增大所选定的一组列。

•	单击一个单元来清除当前选定的行或列，该事件将在 RowColChange 事件出现之前引发。

当前所选列的范围是由 SelStartCol 和属性 SelEndCol 提供的。已选定行的书签都在由 SelBookmarks 属性所提供的集合中。在该事件过程中，这些属性反映了用户尚未确定的选择。

只有在用户和网格交互作用时才会触发该事件。而在代码中则不会触发该事件。

注意   当用户选定一列时，对行所作的选择都将被清除。同样，当用户选定一列时，对列所作的选择都将被清除。


SplitChange 事件

当前单元变为另一个拆分中的不同单元时出现该事件。

语法

Private Sub object_SplitChange([ index As Integer])

SplitChange 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
index	Interger，它标识控件数组中的一个控件。
说明

该事件将在下列情况中被触发：

•	第一次显示网格。

•	单击另一拆分中的单元（服从 AllowFocus 属性的设置值）。

•	按下定位键以跨越拆分边界（服从 TabAcrossSplits 属性的设置值）。

•	在程序代码中改变 Split 属性的值。

•	通过程序代码或用户交互作用，在当前拆分前插入新的拆分。

•	通过程序代码或用户交互作用来删除当前拆分。

如果编辑数据，接着又把当前单元位置移动到另一个拆分中的新行上，则在执行 SplitChange 事件之前就完成了原行的更新事件。

如果对拆分所做的改变导致当前行或列发生改变，那么，SplitChange 事件始终都在 RowColChange 事件之前出现。


UnboundGetRelativeBookmark 事件

只要网格请求用于显示的数据时，都会出现该事件。

语法

Private Sub object_UnboundGetRelativeBookmark([ index As Integer,] startlocation As Variant, ByVal offset As Long, newlocation As Variant, approximateposition As Long)

UnboundGetRelativeBookmark 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
index	Interger，它标识控件数组中的一个控件。
startlocation	书签，与 offset 一起指定在 newlocatio 中返回的行。取值为 Null 的 startlocation 指出来自 BOF 或 要求 EOF 的一行。
offset	该参数指定在 newlocatio 中返回的那一行的相对位置（即位置距 startlocation 的偏移量）。其值为正数表明是一个向前偏移的相对位置，其值为负数则表明是一个向后偏移的相对位置。
newlocation	行的书签，startlocation 加上 offset 就指定了行的位置。如果所指定的行在首行和末行（或 BOF 或 EOF）之外，则将 newlocation 设置为 Null。
approximateposition	该值指定 newlocation 的顺序位置。设置该变量会提高网格显示其垂直滚动条的精确度。如果不知道 newlocation 的确切顺序位置，用户可把它设置为合理的近似值，或者干脆忽略它。
说明

（当把 DataMode 属性设置为 1，即解除绑定时）这个可选事件是与 UnboundReadData 事件一起使用的。只要网格请求显示的数据，它就会引发该事件。可把代码加进事件，以提高工程的性能（其效果常常极为显著）；否则可忽略该事件，而工程仍会正常工作。

从该事件返回之前，用户要设置 newlocation 和 approximatepositio（可选的）n。例如：

如果 offset 为 1（或 -1），则下一行（前一行）偏离 startlocation 的书签将在 newlocation 中返回。

如果 startlocation 为 NULL，offset 为 2（或 -2），则第二行（或倒数第二行）的书签将在 newlocation 中返回。

如果所请求的行超出首行和末行（或超出 BOF 或 EOF），则 newlocation 返回 Null。


ClearFields 方法

恢复缺省的网格布局。

语法

object.ClearFields

object 所在处表示对象表达式，其值是“应用于”列表中的对象。

说明

ClearFields 方法将恢复缺省的网格布局（具有两个空白的列），使后面的 ReBind 操作自动从（可能已改变的）数据源导出新列的绑定。可以调用 HoldFields 方法来取消网格的自动布局性能。


ClearSelCols 方法

撤消对拆分中所有列所作的选择。如果未选择列，则不做任何事情。

语法

object.ClearSelCols

object 所在处表示对象表达式，其值是“应用于”列表中的对象。

说明

如果网格包含多个拆分，则调用其 ClearSelCols 方法与调用当前拆分的 ClearSelCols 方法有相同效果。可由 DBGrid 控件的 Split 属性得到当前拆分的索引。

用 SelStartCol 和 SelEndCol 属性来决定拆分的当前列选定范围。


HoldFields 方法

将当前列/字段的布局设置成用户自定义布局。

语法

object. HoldFields

object 所在处表示对象表达式，其值是“应用于”列表中的对象。

说明

HoldFields 方法将当前列/字段布局设置为自定义布局，从而使后面的 Rebind 操作用当前布局进行显示。可以调用 ClearFields 方法恢复网格的自动布局性能。


SplitContaining 方法

返回包含一对指定坐标的拆分的 Index 值。

语法

object.SplitContaining x, y

SplitContaining 方法的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
x	必需的。一个单精度值，定义了网格容器坐标系上的水平坐标。
y	必需的。一个单精度值，定义了网格容器坐标系上的垂直坐标。
说明

该值在 0 和 1 之间，小于 Splits 集合的 Count 属性设置值（0 到 Splits.Count - 1 之间）。

在使用鼠标和拖动事件工作并试图制定任何借助网格列来单击或拖动其它控件时，这一方法极为有用。

如果两个参数之一超出网格的数据区域，则该方法返回 -1。


拆分

拆分具有同 Microsoft Excel 中的“拆分窗口”相类似的性能。在 Microsoft Excel 中，一个窗口被划分成分离的垂直窗格，能对同一数据提供不同视图。拆分都由 Split 对象表示，并包含一组逐列滚动的相邻列。


Button 属性（Column 对象）

设置或返回值，该值决定是否在当前单元中显示按钮。

语法

object.Button [= value]

Button 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，该表达式决定是否在当前单元中显示按钮，参见设置值中的描述。
设置值

value 的设置值为：

设置	描述
True	运行时按钮将显示在当前单元的右上角。
False	（缺省值）不显示按钮。.
说明

一般来说，当想下拉 Visual Basic 控件（如内置的组合框、被绑定的列表框，甚至另一个 DBGrid 控件）来进行编辑或数据录入时应使列按钮有效。在单击当前单元中的按钮时将引发 ButtonClick 事件。然后就可编写代码，从该单元下拉想要的那个控件。


Value 属性（Column 对象）

设置或返回当前行的一列中的基本数据值。设计时不可用。

语法

object.Value [= value]

Value 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	字符串表达式，它表示当前行的某一列中的基本数据值。
说明

为了在单元中模拟数据输入项，Value 属性十分有用。设置该属性时，单元中显示的值会符合列的 NumberFormat 属性的设置值。

该属性总是返回一字符串变体，即使基本字段的数据类型是数字型，情况亦如此。

可用 Text 属性来访问当前行的列中的格式化数据值。


Caption 属性（DBGrid 控件, Column 对象）

对于 DBGrid 控件，该属性将决定在标题栏中显示的文本，而标题栏位于网格的顶部。

对于 Column 对象，该属性将决定在该列的标头区中显示的文本。

语法

object.Caption [= value]

Caption 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
value	字符串表达式，决定要显示的内容，参见下面的描述。
说明

对于 DBGrid 控件，把 Caption 属性设置为空字符串，可隐藏其标题栏。

对于 Column 对象，把 Caption 属性设置为空字符串，可清除该列头标区中的文本，但不会隐藏头标。如果 DBGrid 把控件的 ColumnHeaders 属性设置为 True，而未把 HeadLines 属性设置为 0，则仅显示各个列标题。


WrapText 属性（Column 对象）

设置或返回一个值，指出对象是否在单元边界上使文本自动换行。

语法

object.WrapText [= value]

WrapText 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，决定对象是否自动换行，参见“设置值”中的描述。
设置值

value 的设置值为：

设置值	描述
True	一行在这样的单词之前折行，若不在此拆行，则这些单词不能被全部显示出来。
False	（缺省值）不折行，文本在单元右边缘被剪开。
说明

可将该属性连同 RowHeight 属性一道使用，以形成多行显示。


AddNewMode 属性

返回一个值，该值描述当前单元相对于网格 AddNew 行的位置。在运行时是只读的，而在设计时不可使用。

语法

object.AddNewMode

AddNewMode 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
值

AddNewMode 属性返回下列的值之一：

常数	值	描述
dbgNoAddNew	0	当前单元不在最后一行中，并且没有挂起的 AddNew 操作。
dbgAddNewCurrent	1	当前单元在最后一行中，但没有挂起的 AddNew 操作。
dbgAddNewPending	2	由于挂起的 AddNew 操作，当前单元位于倒数第二行。而挂起的 AddNew 操作是用户通过网格用户接口，或是由代码设置某列的 Value 或 Text 属性来启动的。
说明

如果 AllowAddNew 属性为 True，则网格中所显示的最后一行是空白行，使用户能够输入新记录。如果 AllowAddNew 属性为 False，则不会显示空白行，而且 AddNewMode 总是返回 0。

注意   该属性对绑定模式和解除绑定模式都有效。


AllowArrows 属性

设置或返回一个值，该值决定控件是否用箭头键对网格定位。

语法

object.AllowArrows [= value]

AllowArrows 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，它决定箭头键是否用来对网格定位，参见“设置值”中的描述。
设置值

value 的设置值为：

设置值	描述
True	（缺省值）可用箭头键在同一行中从一个单元移动到另一个单元。
False	左箭头键和右箭头键将把焦点从一个控件移动到另一个控件，但不能用来在单元之间移动。
说明

当把该属性设置为 True 时，不能用箭头键移动到 DBGrid 控件之外。如果把 WrapCellPointer 属性也设置为 True，则箭头键会在行的边缘上自动换行，并且可用箭头键对整个网格定位。


ApproxCount 属性

设置或返回网格中行的近似数目。

语法

object.ApproxCount [= value]

ApproxCount 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	Interger，表示网格中的近似行数。
说明

该属性设置或返回网格用列的近似行数，网格用此数来校准垂直滚动条。

在解除绑定模式中使用 ApproxCount 属性，一般可提高垂直滚动条的精确度。在事先知道行的数目的情况下（比如把一个解除绑定的网格与一个数组一起使用时），这一点将极为有用。

注意   对绑定的网格，设置 ApproxCount 属性不会产生丝毫效果。然而，获取 ApproxCount 属性则必须查询基本数据源。


CurrentCellModified 属性

设置或返回当前单元的修改状态。在设计时不可用。

语法

object.CurrentCellModified [= value]

CurrentCellModified 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，该表达式决定当前单元的修改状态，参见“设置值”中的描述。
设置值

value 的设置值为：

设置值	描述
True	正在进行编辑，用户已修改当前单元（由 Bookmark 和 Col 属性所指定）。
False	尚未修改该单元，或未进行编辑。
说明

可用该属性取消用户对当前文本所做的任何改动。例如，对一个功能键编程，可放弃用户所做改动（就象 ESC 键那样），在网格的 KeyDown 事件中捕获键的编码，并把 CurrentCellModified 设置为 False。这会把当前单元改回列原来的内容。


CurrentCellVisible 属性

设置或返回当前单元的可见性。在设计时不可用。

语法

object.CurrentCellVisible [= value]

CurrentCellVisible 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，该表达式决定当前单元的可见性，参见“设置值”中的描述。
设置值

value 的设置值为：

设置值	描述
True	（由 Bookmark 和 Col 属性所指示的）当前单元在网格或拆分的显示区中可视。
False	单元是不可视的。
说明

对于 DBGrid 控件，把 CurrentCellVisible 属性设置为 True 将会引起网格滚动，使当前单元出现在视图中。如果网格包含多个拆分，则当前单元在每一个拆分中都是可视的。

对于 Split 对象，把 CurrentCellVisible 属性设置为 True 将使当前单元只在那个拆分中是可视的。

在所有的情况下，把该属性设置为 False 都是毫无意义的，而且都会被忽略。


EditActive 属性

设置或返回当前单元的编辑状态。在设计时不可用。

语法

object.EditActive [= value]

EditActive 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，该表达式决定编辑状态，参见“设置值”中的描述。
设置值

value 的设置值为：

设置值	描述
True	正在编辑当前单元。
False	未进行编辑。
说明

如果网格不在编辑模式下，则把 EditActive 设置为 True，开始对当前单元进行编辑。将插入符定位到单元的末尾并触发 ColEdit 事件。

如果网格已在编辑模式下，则把 EditActive 设置为 False，此时将退出编辑模式。如果已对单元进行过修改，则将触发下列事件：BeforeColUpdate、AfterColUpdate 和 AfterColEdit。

注意   为完全取消编辑，可先把 CurrentCellModified 属性设置为 False，再把 EditActive 设置为 False。


ErrorText 属性

返回来自基本数据源的错误信息串。在设计时不可用。

语法

object.ErrorText

ErrorText 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
说明

用户和网格交互作用会产生数据库错误（比如在一个数字型字段中输入文本，随后又试图移动到另一行以更新当前记录，此时将引发该网格的 Error 事件）。但是，通过 DataError 参数传给该事件处理程序的错误代码不能标识所出现的特殊错误，甚至会因操作环境而不同。鉴于这些原因，应提供 ErrorText 属性，使应用程序可对实际的错误消息进行语法分析，以决定错误的本质。

注意   仅在 DBGrid 控件的 Error 事件处理程序中，ErrorText 属性才有效。如果试图在其它上下文中访问它，就会出现一个可捕获的错误。


hWndEditor 属性

通过 Microsoft Windows 操作环境返回 DBGrid 控件的编辑窗口的唯一窗口句柄。在运行时不可用。

语法

object.hWndEditor

hWndEditor 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
说明

有经验的用户可把属性值传递给需要有效窗口句柄的 Windows API 调用。

在尚未进行编辑的时候，该属性返回 0。

注意   由于该属性值在程序运行时会发生变化，所以绝不要把 hWndEditor 的值存储在变量中。也不要使用 hWndEditor 属性来检测是否正在进行编辑。正是为此才提供了 EditActive 属性。


MarqueeStyle 属性

设置或返回 DBGrid 控件或 Split 对象的字幕样式。

语法

object.MarqueeStyle [= value]

MarqueeStyle 属性的语法包括以下部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	一个数字或常数，它指定字幕的样式，参见“设置值”中的描述。
设置值

value 的设置值为：

常数	值	描述
dbgDottedCellBorder	0	用虚线边框将当前行中的当前单元框起来，因而可突出显示当前单元。用 Microsoft Windows 的术语来说，这是一个焦点方框。
dbgSolidCellBorder	1	用实线边框将当前行中的当前单元框起来，因而可突出显示当前单元。实线框比虚线框更为醒目，当网格使用三维分界属性时情况更是如此。
dbgHighlightCell	2	在当前单元中反转颜色，因而可突出显示整个当前单元。这就给当前单元提供了极为醒目的块状突出显示。
dbgHighlightRow	3	在包含当前单元的一整行中将颜色反转，因而可突出显示这一行。在该模式中不能从外观上判定哪个单元是当前单元，而只能判定当前行。当无法对网格或拆分进行编辑时，该设置值常常优先，因为单元位置在此时是无关紧要的。
dbgHighlightRowRaiseCell	4	突出显示整个行。行中的当前单元会“凸出来”，看起来很醒目。在所有的背景色和分界设置的衬托下，该设置看起来不是很清楚。使用三维分界和浅灰色的背景时可获得最佳效果。
dbgNoMarquee	5	不显示字幕。如果当前行是无关紧要的，或者暂时还不想让用户的注意力集中在网格，则该设置极为有用。
dbgFloatingEditor	6	通过一个带闪烁插入符的浮动编辑器（就象 Microsoft Access 中那种样式的编辑器）来突出显示当前单元。这是缺省设置。
说明

如果网格包含多个拆分，那么设置该网格的 MarqueeStyle 属性的效果与单独设置每个拆分的 MarqueeStyle 属性的效果相同。

注意   如果浮动编辑器的字幕设置值有效，而且当前单元包含了单选钮或图形，则将显示一个虚线焦点框。


MarqueeUnique 属性

设置或返回一个值，该值判定是否仅在当前拆分中显示该字幕。

语法

object.MarqueeUnique [= value]

MarqueeUnique 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，该表达式决定是否仅在当前拆分中显示，参见“设置值”中的描述。
设置值

value 的设置值为：

设置值	描述
True	（缺省值）仅在当前拆分中显示当前单元字幕。
False	如说明中所述，只要当前单元是可视的，所有具有 MarqueeStyle 设置的拆分都在当前单元上显示字幕。
说明

当网格或拆分的 MarqueeStyle 属性取值为 0、1、2 或 4 时，就只显示当前单元字幕。

在大多数情况下，某个当前单元字幕优先，就无须改变该属性。

如果将该属性设置为 False，则可看到几个不同的当前单元字幕。Split 属性的设置值将决定真正的当前单元。

注意   尽管浮动编辑器 MarqueeStyle (6) 在技术上是当前单元字幕，但只能显示一个浮动编辑器，即使将 MarqueeUnique 设置为 False 也如此。


Split 属性

设置或返回当前拆分的索引。在设计时不可用。

语法

object.Split [= value]

Split 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	Interger，它指定当前拆分的索引，参见说明中的描述。
说明

Split 属性指定当前拆分的索引，该索引从零开始。


Splits 属性

返回由 Split 对象所组成的集合。在设计时不可用。

语法

object.Splits

Splits 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。


TabAcrossSplits 属性

设置或返回 Tab 键和箭头键在拆分边缘处的性能。

语法

object.TabAcrossSplits [= value]

TabAcrossSplits 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，该表达式决定 Tab 键和箭头键在拆分边缘的性能，参见“设置值”中的描述。
设置值

value 的设置值为：

设置值	描述
True	Tab 键和箭头键将穿越拆分边界移动当前单元。到了最右拆分的最后一列（或最左拆分的第一列）时，这些键或者会自动换到下一行并停下来，或者移动到别的控件上，这将取决于 WrapCellPointer 和 TabAction 属性的设置值。
False	（缺省值）Tab 键和箭头键不能穿越拆分边界移动当前单元。这些键或者会自动地换到下一行并停下来，或者移动到别的控件上，这将取决于 WrapCellPointer 和 TabAction 属性的设置值。
说明

TabAcrossSplits 属性不能判定 Tab 键和箭头键是否可以在单元之间或控件之间来回移动，或自动向下一行换行。可用 AllowArrows、WrapCellPointer 和 TabAction 属性来控制这种性能。如果 Tab 键和箭头键能够在单元之间来回移动，该属性就可判定这些键是否能够穿过拆分边界，移动到相邻的拆分。


TabAction 属性

设置或返回一个值，该值定义了 Tab 键的性能。

语法

object.TabAction [= value]

TabAction 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	一个数字或常数，它定义了制表符的性能，参见“设置值”中的描述。
设置值

value 的设置值为：

常数	值	描述
dbgControlNavigation	0	（缺省值）Tab 键移动到窗体中的下一个控件或前一个控件。
dbgColumnNavigation	1	Tab 键把当前单元移动到下一列或前一列。但是，如果该操作使当前行发生改变，则窗体中的下一个或前一个控件将接收焦点。
dbgGridNavigation	2	Tab 键把当前单元移动到下一列或前一列。Tab 键在行边界上的性能由 WrapCellPointer 属性决定。使用该属性时，Tab 键始终都不会导致另一控件的移动。
说明

TabAction 属性不能决定 Tab 键是否可穿过拆分的边界。可用 TabAcrossSplits 属性来控制这种性能。


WrapCellPointer 属性

设置或返回值，此值将决定箭头键的性能。

语法

object.WrapCellPointer [= value]

WrapCellPointer 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，它决定箭头键在拆分的边框上的性能，参见“设置值”中的描述。
设置值

value 的设置值为：

设置值	描述
True	单元指针将从最后一列自动换行到下一行的第一列（或从第一列自动换行到前一行的最后一列）。
False	（缺省值）单元指针将自动换行到下一行（或前一行），并停在当前行的最后一列（或第一列）上。
说明

如果 TabAcrossSplits 为 False，则单元指针将在当前拆分中自动换行。如果 TabAcrossSplits 为 True，则单元指针将在自动换行之前从一个拆分移动到下一个拆分中。

如果 TabAction 设置为 2（网格定位），则 Tab 键的性能将与箭头键相似，并自动换行到下一单元或前一单元。


AllowFocus 属性

设置或返回一个值，该值判定拆分中的单元是否能接收焦点。

语法

object.AllowFocus [= value]

AllowFocus 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	布尔表达式，它决定单元是否接收焦点，参见“设置值”中的描述。
设置值

value 的设置值为：

设置值	描述
True	（缺省值）当拆分得到焦点，就能以交互作用方式来选定这个拆分。
False	不能以交互作用方式选定拆分。单击时，拆分不接收焦点，而原先具有焦点的控件将继续保持有焦点。
说明

将该属性与 AllowSizing 属性组合使用时可完全禁止对拆分进行修改（为此把两个属性都设置为 False）。当把 TabAcrossSplits 设置为 True 时将忽略那些不能选定的拆分。


ScrollGroup 属性

用于使两个拆分之间的垂直滚动同步。

语法

object.ScrollGroup [= value]

ScrollGroup 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	一个整数表达式，它决定拆分所属的滚动组。
说明

用该属性使两个拆分之间的垂直滚动同步。对于具有相同 ScrollGroup 设置值的所有拆分，当在其中一个拆分中出现了垂直滚动时，所有拆分都将同步进行。属于不同组的拆分可独立滚动，从而允许不同的拆分显示数据库的不同部分。

如果将拆分的 ScrollBars 属性设置为 4（自动的），则组中的只有最右拆分具有垂直滚动条。如果只有一个拆分，则设置该属性不会产生效果。

设置拆分的 FirstRow 属性会影响同一组中的所有其它拆分，以保持该组同步。

新创建的拆分具有 ScrollGroup 属性值为 1。


Size 属性（Split 对象）

设置或返回拆分的大小。

语法

object.Size [= value]

Size 的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	一个整数表达式，它指定拆分的大小。
说明

该属性所返回值的含义由拆分的 SizeMode 属性的设置值来决定。

如果将 SizeMode 设置为缺省值 0（可放缩的），则 Size 属性返回的值是整数，它指明了该拆分对于另外几个可放缩拆分的相对大小。

如果将 SizeMode 设置为 1（大小确定的），则 Size 属性返回的值是浮点数，它指明该拆分按网格容器的坐标系来计量的确切大小。

如果将 SizeMode 设置为 2（列的个数），则 Size 属性返回的值是整数，它指明该拆分中显示的列数。

注意   当仅有一个拆分（网格的缺省性能）时，拆分的宽度将足以横跨整个网格，SizeMode 属性总是为 0 (dbgScalable)，Size 属性则总是为 1。当仅有一个拆分时，设置这两个属性中的任何一个都不会有效果。如果有多个拆分，则仅留一个而把其余拆分都删除掉，则 SizeMode 和 Size 属性会分别自动重新变成 0 和 1。


SizeMode 属性（Split 对象）

设置或返回一个值，该值决定如何用 Size 属性来规定某个拆分的实际大小。

语法

object.SizeMode [= value]

SizeMode 的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	一个数字或常数，它决定使用 Size 属性的方法，参见“设置值”中的描述。
设置值

value 的设置值为：

常数	值	描述
dbgScalable	0	（缺省值）Size 属性返回的值是整数，指明了这个拆分对于其它可缩放拆分的相对大小。例如，如果网格包含三个可缩放拆分，它们的 Size 属性依次取值为 1、2、3，则每个拆分的大小分别为整个网格宽度的 1/6、1/3 和 1/2。
dbgExact	1	Size 属性返回的值是浮点数，它指明该拆分按网格容器的坐标系来计量的确切大小。有了这个设置值就可修改拆分的大小，使其总有相同宽度，即使添加新的拆分或删除现有的拆分，情况也如此。
dbgNumberOfColumns	2	Size 属性返回的值是整数，它指明该拆分中显示的列数，而拆分将调整其宽度，以显示由 Size 属性所指定的列数。例如，如果把 Size 属性设置为 2，并水平滚动拆分，则拆分的宽度将会改变，以显示整整两列，而不管这两列有多宽。
说明

当只有一个拆分时（网格的缺省情况），拆分将伸展到整个网格，SizeMode 属性总是为 0 (dbgScalable)，Size 属性则总是为 1。当只有一个拆分时，设置这两个属性中的任何一个都不会有效果。如果有多个拆分，仅留一个而把其余拆分都删除掉，则 SizeMode 和 Size 属性会分别自动重新变成 0 和 1。

考虑一个网格，它既包含可放缩拆分，也包含具有固定列数的拆分。如果水平地滚动具有固定列数的拆分，则留给可放缩拆分的总宽度就可能改变，因为网格的列一般有不同宽度。但是，可放缩拆分的比例始终保持 Size 属性所规定的值。


CaptureImage 方法

返回网格在当前状态下显示的被捕获图象。

语法

object.CaptureImage

object 所在处表示对象表达式，其值是“应用于”列表中的对象。

说明

可用 CaptureImage 方法来获得网格的快照。

下列代码用 CaptureImage 方法将 DBGrid 控件的快照赋值给 PictureBox 控件。

Picture1.Picture = DBGrid1.CaptureImage

注意   CaptureImage 方法获得的是元文件类型的图象。所以应将图象的大小调整到其容器的大小。


DBGrid 的支持、文档和升级

Microsoft 支持 DBGrid

与 Visual Basic、Visual C++ 及其它 Microsoft 开发系统一道发售的各种 DBGrid 版本都得到 Microsoft 公司的支持。请参考适用的 Microsoft 产品文档，以了解 Microsoft 公司的支持和升级政策。

APEX 为 DBGrid 提供免费的在线文档

APEX 向 DBGrid 用户提供奖励支持

True DBGrid 标准版

True DBGrid 预发布版本

 APEX 的其它产品

在全球信息网（World Wide Web）上访问 APEX


APEX 为 DBGrid 提供免费的在线文档

APEX 免费提供联机帮助文件，作为一种提供给 DBGrid 用户的服务。该文件包含了大量在 Visual Basic 文档中查找不到的详细信息，还带有教学项目。这份完整的参考是获得有关 DBGrid 信息的明确来源，是任何 DBGrid 用户都“必备的”。要下载副本，请访问 APEX 的 web 地址 http://www.apexsc.com。


APEX 向 DBGrid 用户提供奖励支持

只需合理付费，DBGrid 用户就会得到由 APEX 提供的电子邮件和电话支持。奖励支持的用户可以得到下列优惠：

•	保证在一个业务日的时间内得到电子邮件答复。

•	可以同技术支持人员联系，这些技术人员为处理 DBGrid 查询而专门接受过培训。

•	可以得到 True DBGrid 标准版的正规的发布版本。

•	在升级到 True DBGrid 预发布版时，可以得到折扣。

请在 APEX 的 web 地址查看目前的支持政策和贴现率的有关信息。


True DBGrid 标准版

True DBGrid 标准版对 DBGrid 版只做了微小改进。APEX 发布和支持这一版本是为达到下列目标：

•	按照用户的建议，对 DBGrid 做一些微小改进。

•	改正在预发布时期没有被检测到的严重错误。

•	提供额外的和更新过的文档、入门教材和示例代码。

•	在两次发布 Visual Basic 之间，多次更新并改正错误。

在一定限期内，所有获得许可的 Visual Basic 和 Visual C++ 用户都可免费获得True DBGrid 标准版。在此之后，只有奖励支持的用户才能获得True DBGrid 标准版的升级。要下载一份True DBGrid 标准版的拷贝，可访问 APEX 的 web 地址 http://www.apexsc.com。


True DBGrid 预发布版本

True DBGrid 预发布版本是 DBGrid 以及True DBGrid 标准版功能增强和特征齐全的版本。True DBGrid 预发布版本增添了许多功能强大的数据表示特征，能够生成各种各样格式和风格的数据。

高级特征

•	类似于 Excel 的样式对象模型。

•	能够基于单元的内容自动使用的样式。

•	每个单元都可控制字体、颜色、文本格式和缩进。

•	自动将基本数据转换成要显示的值。

•	单元内的图形、组合框、复选框和单选钮。

•	编辑大字段的下拉式编辑器。

•	功能增强的非绑定模式。

•	易于使用的存储模式。

•	多行记录。

•	输入屏蔽。

•	更多的特征   （请查看本公司的 web 地址，以获得完整的列表）。

创建易于使用、赏心悦目的字体和应用程序

为什么要发送象这样的应用程序：

什么时候可以发送象这样的应用程序？

使用True DBGrid，只需编写少量代码或者根本无需编写代码，就可象上述应用程序那样，很容易实现直观显示。

免费的技术支持

使用True DBGrid 预发布版本的用户可免费（通过电子邮件、电话和传真）得到技术支持。在 ISV 团体内，APEX 的技术支持人员被公认为反应最灵敏、知识最丰富的技术支持人员。本公司的国际分销商也为当地用户提供出色的技术支持。请访问该公司的 web 地址 http://www.apexsc.com，以获得该公司美国和国际转卖商和分销商的最新清单。

免费的功能增强的 MSFlexGrid

在一定限期内只需付一份网格钱就可得到两份网格！当以制造商提出的零售价格购买真正的 DBGrid 时会同时获得 Videosoft 公司的 VSFlex，这是同 Visual Basic 一道发售的 MSFlexGrid 控件的增强版本。

无争议的退款保证

所有的 APEX 产品都具有期限为三十天的无争议的退款保证。

国际支持与分销

True DBGrid Pro 预计发布版本有英文、日文和德文版。要了解日文版和德文版的销售和分销情况，请与下列机构联系：

Bunka Orient Company

1-3-1 Kamo, Izumi-Ku

Sendai-City 981-31

Japan

Tel: 81-22-378-7106

Fax: 81-22-378-7170

Zoschke Data GmbH

Bahnhofstrasse 3

Schoenberg/Holstein  24217

Germany

Tel: 49-4344-6166

Fax: 49-4344-6162

很快将能得到对其它语言的支持。请访问 APEX 的 web 地址 http://www.apexsc.com，以获得关于新语言版本的最新信息以及一份完整的美国和世界范围内的转卖商和分销商清单。


APEX 的其它产品

MyData 控件

如今可以使用带任何数据源的数据连接控件了！MyData 控件将引发各种特殊的 Visual Basic 事件，让您提供自己的数据。这个控件包括最流行的第三方数据库的各种库的丰富实例。

VBA 公司

VBA 公司远不只提供一个性能卓越的对象浏览器，它还为任何 ActiveX 控件或自动化服务器印制新的参考手册，包括用 Visual Basic 开发的 ActiveX 控件和自动化服务器。就好象在系统注册中拥有一个对象资源管理器一样！


在全球信息网（World Wide Web）上访问 APEX

请记住 APEX 的 web 地址是 http://www.apexsc.com，可通过该地址获得最新的产品信息、特殊的优惠、演示产品、实例程序以及美国的和国际的转卖商和分销商的有关信息，

APEX 对产品规范、支持政策、价格以及特殊的优惠可能进行改动而不发布通知。关于最新的信息，请访问本公司的 web 地址，或拨电话 (412) 681-4343。


AfterColUpdate 事件

在数据从 DBGrid 控件中的一个单元格移动到该控件的复制缓冲区后被触发。

语法

Private Sub object_AfterColUpdate ([index As Integer,] colindex As Integer)

AfterColUpdate 事件的语法包括下列部分：

部分	描述
object	对象表达式，该对象一定能在“应用于”列表中找到。
index	整数，用来标识在控件数组中的一个控件。
colindex	是用来标识控件中列的整数。
备注

当用户完成了在一个 DBGrid 控件单元中的编辑，如在同一行中转到另一列，按 ENTER 键，或者控件失去了焦点时，BeforeColUpdate 事件将被执行，除非被取消，否则该单元中的数据将被移到控件的复制缓冲区中。一旦移动，就执行 AfterColUpdate 事件。

AfterColUpdate 事件发生在 BeforeColUpdate 事件之后，而且仅当 BeforeColUpdate 事件中的 cancel 变元未设置为 True 时。

一旦 AfterColUpdate 事件过程开始，单元数据就已经被移到控件的复制缓冲区，而且不能被取消，但在数据提交给 Recordset 之前，可以发生其它更新。


AfterColUpdate 事件示例

本例用于演示在一个列被更新时并把结果放到另一列去。

Private Sub DataGrid1_AfterColUpdate (ColIndex As Integer)

If ColIndex = 1 Then

Data1.Recordset.FindFirst "PubId = " _

 & DataGrid1.Columns(1).Value

If Not Data1.Recordset.NoMatch Then

DataGrid1.Columns(2).Value = _

 Data1.Recordset.Fields("Publisher")

Else

DataGrid1.Columns(2).Value = "No Match"

End If

End If

End Sub


AfterDelete 事件

当用户在 DBGrid 控件中删除一条选定的记录后被触发。

语法

Private Sub object_AfterDelete ([index As Integer,] colindex As Integer)

AfterDelete 事件语法包括下列部分

要素	描述
object	对象表达式，该对象一定能在“应用于”列表中找到。
index	整数，用来标识一个在控件数组中的控件。
colindex	是用来标识列的整数。
备注

当用户在 DBGrid 控件中选择了一个记录选择器，并且按了 DEL 键或 CTRL+X 键时，所选行被删除。 在记录被删除之前， BeforeDelete 事件被触发。该选择行被删除后， AfterDelete 事件被触发。被选择删除的行可在由 SelBookmarks 属性所指向的集合中获得。


AfterDelete 事件示例

本例显示一条信息，确认一条记录被成功地删除。

Private Sub DataGrid1_AfterDelete ()

MsgBox "Record has successfully been deleted!"

End Sub


AfterInsert 事件

在用户往 DBGrid 控件中插入一条新记录后被触发。

语法

Private Sub object_AfterInsert (index As Integer)

AfterInsert 事件语法包括下列部分：

部分	描述
object	对象表达式，该对象一定能在“应用于”列表中找到。
index	整数，标识在控件数组中的控件。
备注

当用户选择一条新记录（在控件的底部）并且在其中一个单元中输入一个字符时，触发 BeforeInsert 事件，接着 BeforeUpdate、AfterUpdate 和 AfterInsert 事件被触发。

当 AfterInsert 事件被触发时，该记录已被添加到数据库中。 Bookmark 属性可用于存取新记录。

 AfterInsert event 不能被取消。

 AfterInsert 事件过程可用于更新其它的表，或进行其它控件事后更新的清理工作。


AfterInsert 事件示例

如果用户在网格中向某列输入一个值，本例在一个相关表中创建一个条目。

Private SubDataGrid1_AfterInsert ()

If DataGrid1.Columns(1).Value <> "" Then

Data2.Recordset.AddNew

Data2.Recordset.Fields("PubId") = DataGrid1.Columns(1).Value

Data2.Recordset.Update

End If

End Sub


AfterUpdate 事件

修改过的数据已经从 DBGrid 控件中被写到数据库后被触发。

语法

Sub object_AfterUpdate (index As Integer)

 AfterUpdate 事件语法包括下列部分：

部分	描述
object	对象表达式，该对象一定能在“应用于”列表中找到。
index	整数，用来标识在控件数组中的控件。
备注

当用户移动到另一行，或执行 Recordset 对象的 Update 方法时，数据从控件的复制缓冲区移动到 Data 控件的复制缓冲区，并被写到数据库中。一旦完成写操作，就触发 AfterUpdate 事件。

通过使用 DBGrid 控件的 Bookmark 属性，被更新过的记录可以用。

 AfterUpdate 事件发生在 BeforeUpdate 事件之后，但是在控件的 LostFocu （或者按 Tab 键次序的下一个控件的 GotFocus）事件之前。 该事以被连结和不被连结两种方式发生，并且不能被取消。

与 Change 事件不同的是，用代码在控件或记录中改变数据不会触发该事件。


AfterUpdate 事件示例

本例是在网格中发生了任何变化时更新一个标签。

Private Sub DataGrid1_AfterUpdate ()

Label1.Caption = "Last modified: " & Format$(Now, "Long Date")

End Sub


BeforeColUpdate 事件

在一个单元内的编辑完成之后而数据从单元移到 DBGrid 控件的复制缓冲区之前被触发。

语法

Private Sub object_BeforeColUpdate ([ index As Integer,] colindex As Integer, oldvalue As Variant, cancel As Integer)

BeforeColUpdate事件语法包含下列部分：

部分	描述
object	对象表达式 ，该对象一定能在“应用于”列表中找到。
index	整数，用来标识在控件数组中的控件。
colindex	是用来标识列的整数。
oldvalue	包含着单元格中变化之前值的一个值。
cancel	如设置中所描述的，是一个指出是否有变化发生的布尔表达式。
设置值

对 Cancel 的设置为

设置	描述
True	取消改变，单元恢复为 Oldvalue ，焦点也恢复到控件。
False	（缺省）持续变化并允许焦点的变化。
备注

当用户在一个单元内编辑完成后，如在一行中转到另一列，按 ENTER 键，或者把焦点从单元中改过来时， Oldvalue 参数指定的数据也从单元移到控件的复制缓冲区，。 在数据从单元移到控件的复制缓冲区之前，触发 BeforeColUpdate 事件。这个事件提供一个把网格单元提交给控件的复制缓冲区之前有检查各个网格单元的机会。

如果事件过程将 Cancle 参数设置为 True ，则恢复单元中以前的值，把焦点保留在控件上，且不触发 AfterColUpdate 事件。

要恢复单元中 oldvalue 并且允许用户把焦点移出单元，将 Cancle 设置为 False ，并按如下方式将单元设置为原来的值：

Cancel = False

DBGrid1.Columns(ColIndex).Value = OldValue

AfterColUpdate事件发生在BeforeColUpdate事件之后。

当把 cancel 参数设置为 True 时，，除非应用程序确定数据能够安全地移回控件的复制缓冲区，否则用户不可以从控件移出焦点。


BeforeColUpdate 事件示例

本例检查并确保用户键入的值在一定范围之内，否则禁止更新。

Private Sub DataGrid1.BeforeColUpdate (ColIndex As Long, OldValue As Variant, Cancel As Integer)

If ColIndex = 1 Then

If DataGrid1.Columns(1).Value < Now Then

Cancel = True

MsgBox "You must enter a date that is later than today."

End If

End If

End Sub


BeforeDelete 事件

发生在 DBGrid 控件中选定的记录被删除之前。

语法

Private Sub object_BeforeDelete ([index As Integer,] cancel As Integer)

 BeforeDelete 事件语法含有下列部分：

部分	描述
object	对象表达式 ，该对象一定能在“应用于”列表中找到。
index	整数，用来标识一个在控件数组中的控件 。
cancel	如设置值中所描述的是一个布尔表达式 ，它指出有一条记录是否被删除了。
设置

对 cancel 的设置为：

设置	描述
True	保持焦点在该控件，不删除记录。
False	（缺省）持续删除操作，使焦点能够改变。
备注

当用户选择控件中的一个记录选择器并按了 DEL 键或 CTL+X 键时，在选定的行被删除之前，触发 BeforeDelete 事件。

一旦行被删除，就触发 AfterDelete 事件。被选定删除的行可由 SelBookmarks 属性提供的集合中获得。

如果事件过程将 cancel 参数设置为 True ，则该行不被删除。

如果选择多于一行，则显示多行不能删除的错误信息。


BeforeDelete 事件示例

本例显示一条信息，要求用户确认从网格中的删除。

Private Sub DataGrid1_BeforeDelete (Cancel As Integer)

Dim mResult As Integer

mResult = MsgBox("Are you sure that you want to delete " & DataGrid1.SeletedRows &  " record?", _

 vbYesNo And vbQuestion, "Delete Confirmation")

If mResult = vbNo Then Cancel = True

End Sub


BeforeInsert 事件

出现在往一个 DBGrid 控件中插入一条记录之前。

语法

Private Sub object_BeforeInsert ([ index As Integer,] cancel As Integer)

 BeforeInsert 事件语法包括下列部分：

部分	描述
object	对象表达式 ，该对象一定能在“应用于”列表中找到。
index	整数，用来标识一个在控件数组中的控件。
cancel	如设值中所描述的是一个布尔表达式 指出是否添加一条记录。
设置

对 cancel 的设置为：

设置	描述
True	保持焦点在该控件，不添加新记录
False	（缺省）持续复制并使焦点能够改变
备注

当用户选择一条新记录（在 DBGrid 控件的底部）并且在其中一个单元中输入一个字符时，触发 BeforeInsert 事件，接着 BeforeUpdate，AfterUpdate 和 AfterInsert 事件被触发。

如果事件过程将 cancel 参数设置为 True ，该行不被插入，单元被清空。

当 BeforeInsert 事件被触发时，该记录还未添加到数据库中。新记录存在于 DBGrid 控件的复制缓冲区中，直到事件过程结束。

 AfterInsert 事件完成后， DBGrid 控件中的新记录行被重新初始化，被编辑的记录成为 DBGrid 控件的最后一行。


BeforeInsert 事件示例

本例显示一条信息，要求用户确认网格中一条新记录的添加。

Private Sub DataGrid1_BeforeInsert (Cancel As Integer)

Dim mResult As Integer

mResult = MsgBox("Confirm: Add a new record?", _

 vbYesNo And vbQuestion, "Confirmation")

If mResult = vbNo Then Cancel = True

End Sub


BeforeUpdate 事件

发生在数据从 DBGrid 控件移动到控件的复制缓冲区之前。

语法

Private Sub object_BeforeUpdate ([index As Integer,] cancel As Integer)

 BeforeUpdate 事件语法包括下列部分：

部分	要素
object	对象表达式 ，该对象一定能在“应用于”列表中找到。
index	整数，用来标识一个在控件数组中的控件。
cancel	如设置值中所描述的是一个布尔表达式 指出是否复制数据。
设置

 cancel 的设置为：

设置	描述
True	保持焦点在该控件，不复制数据。
False	（缺省） 持续复制操作并使焦点能够改变。
备注

当用户移动到另一行或者执行 Recordset 对象的 Update 方法时，数据将从 DBGrid 控件的复制缓冲区移动到 Data 控件的复制缓冲区，并且写到数据库里。

在数据从 DBGrid 控件的复制缓冲区移到 Data 控件的复制缓冲区之前，触发 BeforeUpdate 事件。除非复制操作被取消，在数据被移回至 Data 控件的复制缓冲区并写到数据库以后， AfterUpdate 事件被触发。更新的记录可通过使用 DBGrid 控件的 Bookmark 属性获取。

如果将 BeforeUpdate 事件的 cancel 参数设置为 True ，焦点会保持在控件上，既不触发 AfterUpdate 事件也不触发 LostFocus 事件，记录也不存入数据库。

 BeforeUpdate 事件发生在该控件的 AfterUpdate 和 LostFocus 事件之前，或发生在按 Tab 键次序的下一个控件的 GotFocus 事件之前

即使该控件未被连结该事件也会发生。

与 Change 事件不同的是，使用代码改变控件或记录中的数据时不触发本事件。

在允许用户将变化提交 Data 控件的复制缓冲区之前， 可以用本事件使一个被绑定的控件记录中的数据有效。通过将 cancel 参数设置为 True , 用户不能将焦点移离控件，除非应用程序确定数据能够安全地移回 Data 的复制缓冲区。


BeforeUpdate 事件示例

本例显示一条信息，告诉用户在网格可以被更新之前，在第一列输入一个值。

Private Sub DataGrid1_BeforeUpdate (Cancel As Integer)

If DataGrid1.Columns(1).Value = "" Then

MsgBox "You must enter value in the first column!"

Cancel = True

End If

End Sub


ColResize 事件

当某个用户调整 DBGrid 控件的一个列的大小时该事件发生。

语法

Private Sub object_ColResize ([ index As Integer,] colindex As Integer, cancel As Integer)

 ColResize 事件语法包括下列部分：

部分	描述
object	对象表达式 ，该对象一定能在“应用于”列表中找到。
index	整数，用来标识一个在控件数组中的控件。
colindex	用来标识列的一个整数。
cancel	如设置值中所描述的，是一个布尔表达式 确定是否调整一个列的大小。
设置

 cancel 的设置为：

设置	描述
True	取消所做的改变，将列恢复到原来的宽度。
False	（缺省）继续宽度改变。
备注

当用户调整一个列的大小时，触发 ColResize 事件。  事件过程可以接收所做的改变，修改改变程度，或完全取消所做的改变。

如果设置 cancel 变元为 True，列宽被恢复。要修改改变程度，可设置 Column 对象的 Width 属性为想要的值。

在过程中执行 Refresh 方法引起控件重画 (repaint)，不管 cancel 变元是否为 True。


ColResize 事件示例

如果用户调整第一列的尺寸的话，本例按第一列的大小调整所有列的尺寸。

Private Sub DataGrid1_ColResize (ColIndex As Integer, Cancel As Integer)

Dim nCol As Column

If ColIndex = 1 Then

For Each nCol In DataGrid1.Columns

nCol.Width = DataGrid.Columns(1).Width

Next

End If

End Sub


HeadClick 事件

在用户单击一个 DBGrid 控件指定列的标题时发生。

语法

Private Sub object_HeadClick ([ index As Integer,] colindex As Integer)

HeadClick 事件语法包括下列部分：

部分	描述
object	是个对象表达式 ，该对象一定能在“应用于”列表中找到。
index	整数，用来标识在控件数组中的控件。
colindex	用来标识列的一个整数。
备注

这个事件可用于按照选定的列对 Recordset 对象进行重新排序。


HeadClick 事件示例

本例基于被单击的列对 Data 控件的记录源进行排序。

Private Sub DataGrid1_HeadClick (ColIndex As Integer)

Data1.RecordSource = "Select * From Publishers Order By " & _

 DataGrid1.Columns(ColIndex).DataField

Data1.Refresh

End Sub


RowResize 事件

当某个用户调整一个 DBGrid 控件中的行尺寸时该事件发生。

语法

Private Sub object_RowResize ([ index As Integer,] cancel As Integer)

RowResize 事件语法包括下列部分：

部分	描述
object	对象表达式，该对象一定能在“应用于”列表中找到。
index	整数，用来标识一个在控件数组中的控件。
cancel	如设置值中所描述的，是一个布尔表达式指出是否取消一个改变。
设置

 cancel 的设置为：

设置	描述
True	取消所做的改变，把行恢复为原来的高度。
False	（缺省）继续高度改变。
备注

用户可以用鼠标调整 DBGrid 控件行的尺寸。当用户改变高度时，触发 RowResize 事件。  事件过程可以接受所做的改变，修改改变的程度，或完全取消所做的改变。

 DBGrid 控件的 RowHeight 属性确定了控件中所有行的高度。

如果将 cancel 参数设置为 True ，则恢复行高度。要修改改变的程度，可设置 RowHeight 属性为想要的值。

在过程中执行 Refresh 方法引起控件重画，不管 cancel 参数是否为 True。


RowResize 事件示例

本例确保网格上至少有五个可见的行。

Private Sub DataGrid1_RowResize (Cancel As Integer)

If DataGrid1.VisibleRows < 5 Then Cancel = True

End Sub


CellText 方法

从一个 DBGrid 控件单元格返回一个格式化文本值。不支持命名的参数。

语法

object.CellText bookmark

CellText 方法的语法包含下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
bookmark	必需的。字符串表达式，它代表 DBGrid 控件中的一行。
说明

对 bookmark 值所指定的行，CellText 方法返回一个代表当前列中数据的格式化字符串。除了可以选择一个指定行并从中检索值外， 使用 CellText 方法同访问 Text 属性很相似。

CellText 方法的返回值是通过按照 Column 对象的 NumberFormat 属性所指定的格式对 Text 属性进行格式化的结果。

使用 CellText 方法时，用 Columns 集合指定 DBGrid 控件的特定列，并设置 bookmark 参数为一个特定行。

利用 CellText 方法从一个单元提取信息不会影响当前选择。


CellText 方法示例

这个例子从顶行和底行取得信息，并将其显示在一个标签里。

Sub DBGrid1_Scroll (Cancel As Integer)

Dim TopRow, BottomRow

TopRow = DBGrid1.Columns(1).CellText(DBGrid1.FirstRow)

BottomRow = DBGrid1.Columns(1).CellText(DBGrid1.RowBookmark _

 (DBGrid1.VisibleRows - 1))

Label1.Caption = "Records " & TopRow & " to " & _

 BottomRow & " are currently displayed."

End Sub


CellValue 方法

对一个在 DBGrid 控件中指定的行，返回其中某列的原始数据。不支持命名的参数。

语法

object.CellValue bookmark

CellValue 方法的语法包含下列部分 ：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
bookmark	必需的。字符串表达式，它包含存储在一个选定的 DBGrid 控件单元中的未格式化数据。
说明

当使用 CellValue 方法时，使用 Columns 集合指定 DBGrid 控件的特定列，并将 bookmark 书签参数设置为一个特定行。

除非可以在 DBGrid 控件中指定一个特定行作为参照，使用 CellValue 方法返回当前Column 对象的 Value 属性设定值。

利用 CellValue 方法从一个单元格提取信息不会影响当前选择。


CellValue 方法示例

这个例子从选定行的范围中，检索某个给定列中所有的值，并把它们装入一个数组中。

Sub Command1_Click ()

Dim I

ReDim CalcArray (0 to DBGrid1.SelBookmarks.Count - 1)

For I = 0 to DBGrid1.SelBookmarks.Count -1

'在选定的行数组中，把当前行的值

'放入相应的 CalcArray 单元格。

CalcArray(I) = _

 DBGrid1.Columns(1).CellValue(DBGrid1.SelBookmarks(I))

Next I

End Sub


ColContaining 方法

返回包含指定的 (X) 坐标值的 DBGrid 控件的列的 ColIndex 值。不支持命名的参数。

语法

object.ColContaining coordinate

ColContaining 方法的语法包含下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
coordinate	必需的。简单数值表达式，它定义一个基于容器的坐标系统的水平坐标（X 值）。
说明

ColContaining 方法返回一个与 object 控件指定的列索引之一对应的数。  这个数的范围是从 0到 Columns 集合的 Count 属性减 1（0 到 Columns.Count - 1)。当用鼠标和拖动事件进行工作时，如果要确定在何处单击或在 DBGrid 控件的某列放置另一个控件时，本方法是很有用的。

如果 coordinate 到了容器的坐标系统之外，就发生一个可以捕获的错误。

注意   ColContaining 方法返回的是指定列而不是可视列的 ColIndex。 如果 coordinate 落在第一个可视的列中，但是两个列已滚出控件的左边，ColContaining 方法返回 2。


GetBookmark 方法

对与 DBGrid 控件中当前行相关的的某一行，返回一个包含书签的值。 不支持命名参数。

语法

object.GetBookmark value

The GetBookmark 方法的语法包含下列部分 ：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	必需的。如“设置值”中所描述的长数值表达式，它确定与当前行的  DBGrid 控件相关的那些行位置，。
设置值

value 的设置值为：

设置值	描述
0	返回当前行的书签－ 与 DBGrid1.Bookmark 相同。
1	返回当前行之后一行的书签。
-1	返回当前行之前一行的书签。
n	返回与基于 (DBGrid1.Row + n) 的当前行相关的行的书签。
说明

GetBookmark 方法返回的值可能同 RowBookmark 方法有很大差异，因为当前行可能不是可见的。


GetBookmark 方法示例

在这个例子中，检查一个特定列的更新值，以确保新值位于上一行和下一行的值之间。

Sub DBGrid1_BeforeColUpdate (ColIndex As Integer, _

 OldValue as Variant, PrevVal, NextVal, CurVal, Cancel As Integer)

If 列索引 = 1 Then

PrevVal = DBGrid1.Columns(1).CellValue(_

 DBGrid1.GetBookmark(-1))

NextVal = DBGrid1.Columns(1).CellValue(_

 DBGrid1.GetBookmark(1))

CurVal = DBGrid1.Columns(1).Value

If CurVal > PrevVal Or CurVal < NextVal  Then

Cancel = True

MsgBox "Value must be between" & PrevVal _

 & " and " & NextVal

End If

End If

End Sub


Add 方法（Columns, SelBookmarks, Splits 集合）

把一个新列添加到 Columns 集合，或把一个新书签添加到 DBGrid 控件的 SelBookmarks 集合或把一个新拆分添加到 Splits 集合。不支持命名的参数。

语法

object.Add colindex

object.Add bookmark

Add 方法的语法包含下列部分 ：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
colindex	必需的。如“设置值”中所示。是一个整数，用于指定新的 Column 对象或 Split 对象被插入到 Column 集合或 Split 集合的什么地方，
bookmark	将被添加到集合里的书签。
设置值

colindex 列索引的设置值为：

设置值	描述
0	插入新列作为最左边的列。
Count	如果 colindex 参数与 Count 属性设置相同，则新列作为最右边的列插入。
n	把新列插入到 Columns 集合中第 n 列的左边。第 n 列及所有后续的列相应增加。
说明

Add 方法根据 colindex 参数把一个新 Column 插入到 Columns 集合中。 添加的新列的 Visible 属性设置为 False，其它属性设置为缺省值。 初始时，由于 DataField 属性被设置为一个“0 长度字符串” ("")，故新列未被连结。 Columns 集合的 Count 属性增加以反映这一新的列。

重点   如果以前使用 Remove 方法删除了一个列，在增加了新的列后，就可能需要用 Rebind 和 Refresh 方法刷新显示。这就命令 DBGrid 控件重新生成其内部列的布局矩阵，以正确反映控件的真实状态。

使用 Add 方法把书签添加到 SelBookmarks 集合。当一个书签添加到 SelBookmarks 集合后，它即在 DBGrid 控件中被选中。


Rebind 方法

重新生成 DBGrid 控件属性和列。不支持命名的参数。

语法

object.Rebind

说明

Rebind 方法使 DBGrid 控件执行与设置 DataSource 属性时发生的操作相同的操作。DBGrid 控件对列标题以及基于当前 Data 控件属性的其它属性进行复位。

如果在设计时未修改网格列,则执行 ReBind 方法将复位列、标头以及其它基于当前数据源的属性。

但是，如果已在设计时以任何方式改变了列（甚至留下 DataField 属性空白），则网格将假定您想要保持已修改了的网格布局并不会自动复位列。

对未绑定的（具有设置为 1 的 DataMode 属性的）网格，该方法与 Refresh 方法相似，只是此处的网格要恢复当前的与最顶层的行。

注意   为强制网格复位列绑定，甚至在设计时修改了列时也如此，请在 ReBind. 之前直接调用 ClearFields 方法。反之，为取消网格自动布局响应并强制网格使用当前的列/字段布局，请在 ReBind 之前直接调用 HoldFields 方法。


Rebind 方法示例

这个例子检查一个全局变量，查看用户是否改变了表的布局并用原始表信息重新配置。

Sub CheckForRebind_Click ()

If UserChangedLayout Then

DBGrid1.Rebind

End If

End Sub


Remove 方法 (DBGrid)

从 SelBookmarks 集合中删除指定的行，或从 DBGrid 控件的 Column 集合中删除指定的 Columns 对象。

不支持命名的参数。

语法

object.Remove index

Remove 方法的语法包含下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
index	必需的。一个整数，其值的范围为 0 到集合的 Count 属性设置值 -1。
说明

对于 SelBookmarks 集合来说，Remove 方法删除由 index 参数指定的行，然后把 SelBookmarks.Count 属性减 1。如果从 SelBookmarks 集合中删除的行是可见的，它将从 DBGrid 控件中取消选中状态。

对于 Columns 集合，Remove 方法删除 index 参数指定的列，然后把 Columns.Count 属性减 1。

如果指定的行不在 SelBookmarks 集合，或者一个 Column 对象不在 Columns 集合中，将发生一个可以捕获的错误。


RowBookmark 方法

对 DBGrid 控件中的可见行，返回一个包含书签的值。不支持命名的参数。

语法

object.RowBookmark value

RowBookmark 方法的语法包含下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	必需的。一个整数，其值的范围为 0 到 DBGrid 控件的 VisibleRows 属性的设置值减 1。
说明

RowBookmark(0) 返回的书签与 DBGrid 控件的 FirstRow 属性相同。正象 DBGrid 控件的 Bookmark 属性所定义的，如果当前行不是可见的，那么当前行有可能不能通过这一方法返回。

注意   RowBookmark 返回的书签将不被保存，因为它们的值当行在 DBGrid 控件中成为可见时会发生变化。


RowBookmark 方法示例

本例选择网格上当前可见的所有行。

Sub SelectAllVisible_Click ()

Dim I

For I = 0 To DBGrid1.VisibleRows - 1

DBGrid1.SelBookmarks.Add DBGrid1.RowBookmark(I)

Next I

End Sub


RowContaining 方法

返回一个与 DBGrid 控件指定的纵坐标 (Y) 的行号相对应的值。不支持命名的参数。

语法

object.RowContaining coordinate

RowContaining 方法的语法包含下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
coordinate	必需的。一个单数值表达式，它指定基于容器坐标系统的纵向值（Y 值）。
说明

RowContaining 方法返回一个值，它对应于由 object 指定的控件的列索引之一。这个值的范围是从 0 到 VisibleRows 属性的设置值减 -1。当用鼠标和拖事件进行工作时如果要确定用户在何处进行单击或以 DBGrid 控件的一个列的形式放置其它控件时这个方法是很有用的。

如果坐标位于容器的坐标系统之外，就发生一个可以捕获的错误。


RowContaining, ColContaining 方法示例

本例是保存用户开始实施一个拖动方法时所处单元的值。

Dim SaveValue

Sub DBGrid1_MouseDown (Button As Integer, Shift As Integer, _

 X As Single, Y As Single)

Dim RowValue, ColValue

'获得鼠标经过的行列值。

RowValue = DBGrid1.RowContaining(Y)

ColValue = DBGrid1.ColContaining(X)

'如果两个值都有效，则保存单元的文本并

'开始拖动。

If RowValue > 0 And RowValue < DBGrid1.VisibleRows And _

 ColValue > 0 And ColValue < DBGrid1.VisibleCols Then

SaveValue = DBGrid1.Columns(ColValue). _

CellValue(DBGrid1.RowBookmark(RowValue))

DBGrid1.Drag 1

End If

End Sub


RowTop 方法

返回一个包含 DBGrid 控件的一个指定行顶部的纵坐标 (Y) 的值。不支持命名的参数。

语法

object.RowTop value

RowTop 方法的语法包含下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	必需的。整数，它指定一个界于 0 到 VisibleRows 属性的设置值减 1 范围内的行。
说明

 RowTop 方法返回一个值，对应于它指定行顶部的Y坐标。  返回值基于容器的ScaleMode 属性。

可以使用带 RowHeight、 Left 和 Column 对象的 Width 属性的 RowTop 方法确定 DBGrid 控件中的一个选定单元的精确位置和维数。


RowTop 方法示例

本例开始在网格内的一个拖操作。利用网格单元位置和尺寸属性，一个 Label 控制单元大小被用作拖对象。

Sub DBGrid1_MouseDown (Button As Integer, _

Shift As Integer, _

 X As Single, Y As Single)

' 声明变量。

Dim DY, DX, RowValue, ColValue, CellLeft, CellTop

   ColValue = DBGrid1.ColContaining(X)

   RowValue = DBGrid1.RowContaining(Y)

' 取得单元的高度。

   DY = DBGrid1.RowHeight

' 取得单元的宽度。

   DX = DBGrid1.Columns(ColValue).Width

CellLeft = DBGrid1.Columns(ColValue).Left

   CellTop = DBGrid1.RowTop(RowValue)

   Label1.Caption = DBGrid1.Columns(ColValue). _

CellValue(DBGrid1.RowBookmark(RowValue))

   Label1.Move CellLeft, CellTop, DX, DY

   Label1.Drag ' 拖动标签外框。

End Sub


Scroll 方法

在一个简单操作中水平或垂直地滚动 DBGrid 控件。不支持命名参数。

语法

object.Scroll colvalue, rowvalue

Scroll 方法的语法包含下列部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
colvalue	必需的。长数值表达式，指定控件中的某列。
rowvalue	必需的。长数值表达式，指定控件中的某行。
说明

正值往右下方滚动。负值往左上方滚动。超出范围的值不会产生错误－ DBGrid 控件可滚到最大级。通过设置 FirstRow 和 LeftCol 属性可以得到同样效果，但它们必须独立设置，且引起两个单独的 Paint 事件。


Scroll 方法示例

本例创建两个使用户能够沿对角线滚动的按钮，一是向右下移动，二是向左上移动。

Sub ScrollDownRight_Click

' 向右下滚动。

DBGrid1.Scroll DBGrid1.VisibleCols,  DBGrid1.VisibleRows

End Sub

Sub ScrollUpLeft_Click

' 向左上滚动。

DBGrid1.Scroll -DBGrid1.VisibleCols, -DBGrid1.VisibleRows

End Sub


AllowAddNew 属性

返回或设置一个值，指出用户是否能够向与 DBGrid 控件连接的 Recordset 对象中添加新记录。

语法

object.AllowAddNew [= value]

AllowAddNew 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	如“设置值”中所示，确定用户是否能够添加新记录的布尔表达式。
设置值

value 的设置值为：

设置	描述
True	用户可以向与 DBGrid 控件连接的 Recordset 对象中添加记录。
False	用户不能向与 DBGrid 控件连接的Recordset 对象中添加记录。
说明

如果 AllowAddnew 属性为 True，则在 DBGrid 控件中显示的最后一行被留作空白以允许用户输入新记录。如果 AllowAddNew 属性为 False，则无空白行显示，用户无法定位进行输入。

即使 AllowAddNew 属性为 True，Recordset 也可能不允许插入。在此情况下，若用户试图添加记录就会产生错误提示。


AllowAddNew、AllowDelete、AllowUpdate 属性示例

下面的例子检查复选框的值。如果它是 False，用户就不能改变网格。

Private Sub Form_Load ()

If Check1.Value = 0 Then

DBGridDataGrid1.AllowDelete = False

DBGridDataGrid1.AllowAddNew = False

DBGridDataGrid1.AllowUpdate = False

End If

End Sub


AllowDelete 属性

返回或设置一个值，指出用户能否从与 DBGrid 控件连接的 Recordset 对象中删除记录。

语法

object.AllowDelete [= value]

AllowDelete 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	如“设置值”中所示，一个确定用户能否删除记录的布尔表达式。
设置值

value 的设置值为：

设置	描述
True	用户可以从与 DBGrid 控件连接的 Recordset 对象中删除记录。
False	用户不能从与 DBGrid 控件连接的Recordset 对象中删除记录。
说明

使用 AllowDelete 属性防止用户在 Recordset 中通过与 DBGrid 控件的交互过程来删除记录。

即使 AllowDelete 属性为 True，Recordset 也可能不允许删除。在此情况下，若用户试图删除记录就会产生错误。


AllowSizing 属性

返回或设置一个值，指出用户是否能在运行期间将 DBGrid 控件中的列或 拆分重置大小。

语法

object.AllowSizing [= value]

AllowSizing 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	如“设置值”所示，布尔表达式，它确定一个列或拆分是否能够重置大小。
设置值

value 的设置值为：

设置	描述
True	（对 Column 为缺省）用户可以重置列的大小。
False	（对 Split 为缺省）用户不能重置列或拆分的大小。
说明

如果 AllowSizing 属性为 True，则当鼠标指针位于特定列的行的分界线时，它会变成双箭头（大小为 W E），用户可以通过拖曳重置列的大小。

列大小的任何改变都会引发一个 ColResize 事件。

如果对最左边的拆分， AllowSizing 设置成 True，则当鼠标指针在拆分大小框中（左下角）时，它将转向一对箭头向下的竖线，用户可拖动鼠标创建新的拆分。创建新的拆分将会引起 SplitChange 事件。

如果对任何其它拆分，AllowSizing 都设置成 True，则当鼠标指针在拆分大小框中（左下角）时，它将转向一对具有双箭头的竖线，用户可拖动鼠标调整拆分的大小。在这种情况中不会引起任何事件（标准鼠标事件除外）。


AllowSizing 属性示例

这个示例防止用户将网格的前三列重置大小或进行编辑。

Private Sub Form_Load ()

Dim I

For I = 0 to 2

DBGridDataGrid1.Columns(I).AllowSizing = False

DBGridDataGrid1.Columns(I).Locked = TrueFalse

Next I

End Sub


AllowRowSizing 属性

返回或设置一个值，指示用户能否在运行时重置 DBGrid 控件的行或 Split 对象的大小。

语法

object.AllowRowSizing [= value]

AllowRowSizing 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	如“设置值”中所示，一个确定用户能否重置行的大小的布尔表达式。
设置值

value 的设置值为：

设置	描述
True	行的大小可以被用户改变。
False	行的大小不能被用户改变。
说明

如果 AllowRowSizing 属性为 True，则当鼠标指针被定位在记录选定器之间的分界线上时变为双向箭头（大小为 N S），且用户可以通过拖动重置行的大小。行的大小的任何改变都将引发一个 RowResize 事件。

DBGrid 控件的所有行总是具有相同的高度，这一高度是由 RowHeight 属性确定。

注意   即使 AllowRowSizing 属性为 False，行的高度也仍可用 RowHeight 属性可编程地改变。


AllowRowSizing 属性示例

这个例子检查数据库是否具有备注字段，如果没有，则禁止重置行的大小。

Private Sub Form_LoadCheckForMemoField()

Dim Fld As Field

DataGBGrid1.AllowRowSizing = False

For Each Fld in Data1.Recordset.Fields

If Fld.Type = dbMemo Then

DataBGrid1.AllowRowSizing = True

DataBGrid1.RowHeight = DataBGrid1.RowHeight * 2

Exit For

End If

Next

End Sub


AllowUpdate 属性

返回或设置一个值，指示用户能否修改 DBGrid 控件中的数据。

语法

object.AllowUpdate [= value]

AllowUpdate 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	如“设置值”中所示，确定用户能否改变数据的布尔表达式。
设置值

value 的设置值为：

设置	描述
True	用户可以修改 DBGrid 控件中的数据。
False	用户不能修改 DBGrid 控件中的数据。
说明

当 AllowUpdate 属性为 False 时，用户仍然可以通过 DBGrid 控件进行滚动并选择数据，但不能改变任何值；忽视任何改变网格中数据的操作。

也可以使用 Column 对象属性使 DBGrid 控件的单个列成为只读的，但 AllowUpdate 属性设置居优先于列设置值（不改变列设置值）。

注意   即使 AllowUpdate 对 DBGrid 控件为 True，Recordset 对象也可能不允许更新；在此情况下，当用户试图改变记录时会发生一个可捕获的错误。


ColIndex 属性

返回或设置一个值，指示列在 DBGrid 控件的 Columns 集合中列的位置以及列在 DBGrid 控件中的可见位置（从左到右）。此属性在运行时是只读的，而在设计时是不可用的。

语法

object.ColIndex [= value]

ColIndex 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	一个从 0（最左边一列）到 Count 属性的设置值的整数。
说明

此属性返回 Columns 集合内列的零级索引。


ColumnHeaders 属性

返回或设置一个值，指示是否在 DBGrid 控件中显示列标头。

语法

object.ColumnHeaders [= value]

ColumnHeaders 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	如“设置值”中所示，确定列标头是否被显示的布尔表达式。
设置值

value 的设置值为：

设置	描述
True	显示 DBGrid 控件的列标头。
False	不显示 DBGrid 控件的列标头。


Columns 属性 (DBGrid)

返回一个 Column 对象的集合。

语法

object.Columns

object 所在处代表对象表达式，其值是“应用于”列表中的对象。

说明

Columns 属性返回一个在 Variant 中的 Column 对象的集合。

可以通过改变 Column 对象的属性的方法来操作 DBGrid 控件的大多数属性。用 Col 属性选择一个特定的 Column 对象。


DataChanged 属性 (DBGrid)

返回或设置一值，指出被绑定的控件中的数据已被某进程改变，而不获取当前记录的数据。在设计时不可用。

语法

object.DataChanged [= value]

DataChanged 属性语法具有以下几部分：

部分	描述
object	对象表达式，其值为应用于列表中的对象。
value	布尔表达式，指出是否可改变数据，如“设置值”中所述。
设置值

value 的设置值为：

设置值	描述
True	当前控件中的数据不同于当前记录中的数据。
False	（缺省）如果当前控件中的数据存在的话，就与当前记录中的数据相同。
说明

当 Data 控件从记录移动到记录时，它将数据从当前记录中的字段移动到被绑定到特定字段或整个记录的控件。当在被绑定的控件中显示数据时，DataChanged 属性被设置成 False。如果用户或任何其它操作改变了被绑定的控件中的值，则 DataChanged 属性被设置成 True。直接移动到其它记录上并不会影响 DataChanged 属性。

当 Data 控件开始移动到不同的记录时，则出现有效性事件。如果 DataChanged 对任何被绑定的控件为 True，则 Data 控件自动调用 Edit 和 Update 方法通知对数据库的改变。

如果不希望将变化从被绑定的控件保存到数据库，则可在有效性事件中将 DataChanged 属性设置成 False。

在控件的改变事件的代码中检查 DataChanged 属性的值，避免层叠事件。将此应用于被绑定的控件和未被绑定的控件。

数据类型

Integer (Boolean)


DataField 属性（DBGrid 控件, Column 对象）

返回或设置值，将控件绑定到当前记录中的字段上。

语法

object.DataField [= value]

DataField 属性 语法具有以下几部分:

部分	描述
object	对象表达式，其值为“应用于”列表中的对象。
value	字符串表达式，其值为 Recordset 对象中字段的一个名称，而对象是由 Data 控件的 RecordSource 和 DatabaseName 属性指定的。
说明

被绑定的控件可在数据库中访问特定数据。通常，管理单一字段的被绑定的控件显示当前记录中的特定字段值。被绑定的控件的 DataSource 属性指定一个有效的 Data 控件名称，而 DataField 属性则在 Data 控件所创建的 Recordset 对象中指定有效的字段名称。这些属性指定出现在被绑定的控件中的数据。

在使用返回表达式的 QueryDef 对象或 SQL 语句时，字段名称自动由 Microsoft Jet 数据库引擎生成。例如，在SQL 查询中编写 SQL 合计函数或表达式时，除非用 AS 子句给合计字段起别名，否则自动生成字段名称。通常，表达式字段名称为 Expr1，以三个字符数字 000 开头。返回的第一个表达式的名称 Expr1000。

推荐您编写 SQL查询别名表达式的列，如下所示：

Data1.RecordSource = "Select AVG(Sales)  " _

& " AS AverageSales From SalesTable"

Text1.DataField = "AverageSales"

Data1.Refresh

注意   确保 DataField 属性设置对每个被绑定的控件都有效。如果改变 Data 控件的 RecordSource 属性的设置并使用 Refresh，则 Recordset 识别新对象。这可能使被绑定的控件的 DataField 设置值无效，并产生可捕获的错误。

数据类型

String


DefColWidth 属性

返回或设置一个值，指示 DBGrid 控件中所有列的缺省宽度。

语法

object.DefColWidth [= value]

DefColWidth 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	一个基于控件的比例模型的整数。
说明

如果将 DefColWidth 属性设置为 0，则该控件在列标头宽度或基本字段的 Size 属性设置的基础上自动调整所有列的大小。例如，将所有列的缺省列宽度设置为第一列的宽度：

DBGridDataGrid1.DefColWidth = DBGridDataGrid1.Columns(0).Width


DividerStyle 属性

返回或设置一个值，指定画在 DBGrid 控件的选定列右边缘上的边框样式。

语法

object.DividerStyle [= value]

DividerStyle 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	如“设置值”中所示，一个指定边框样式的整数。
设置值

value 的设置值为：

常数	值	描述
dbgNoDividers	0	无分界线
dbgBlackLine	1	黑色线
dbgDarkGrayLine	2	（缺省）深灰色线
dbgRaised	3	突起
dbgInset	4	内陷
dbgUserForeColor	5	分界线是用 ForeColor 属性所设置的颜色画出的
dbgLightGrayLine	6	浅灰色线
说明

DividerStyle 属性不影响列是否能够通过拖动的方法来被改变大小。当边框是突起的或内陷的时候，所用的颜色由 Microsoft Windows 来设置。


DividerStyle 属性示例

这个例子在用户单击标头的时候改变列的分界线。

Private Sub DBGrid1_HeadClick (ColIndex As Long)

If DBGrid1.Columns(ColIndex).DividerStyle <> 5 Then

DBGrid1.Columns(ColIndex).DividerStyle = _

 DBGrid1.Columns(ColIndex).DividerStyle + 1

Else

DBGrid1.Columns(ColIndex).DividerStyle = 0

End If

End Sub


FirstRow 属性

返回或设置一个值，包含 DBGrid 控件或 Split 对象中第一个可见行的书签。在设计时不可用。

语法

object.FirstRow [= value]

FirstRow 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	字符串表达式，它包含相应于 DBGrid 控件或 Split 对象中第一个可见行的书签。
说明

对 DBGrid 控件，设置 FirstRow 属性将导致网格滚动，使特定行成为最顶层的行。如果网格包含多个拆分，则最顶层的行在每个拆分中都改变，甚至在拆分具有不同的 ScrollGroup 属性设置值时也如此。

对 Split 对象，FirstRow 属性中的设置使指定的行只对该拆分变成最顶层的行。


HeadFont 属性

返回或设置一个值，指示在 DBGrid 控件列标头中使用的字体。

语法

object.Type [= value]

Type 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	对 Font 对象进行计算的对象表达式。缺省值是将该列的当前字体设置为粗体。
说明

改变 HeadFont 属性可能会改变标头的对象以接纳新字体。


HeadLines 属性

返回或设置一个值，指示显示在 DBGrid 控件标头的列标头中的文本行数。

语法

object.HeadLines [= value]

HeadLines 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	一个从 0 到 10 的Single 数据类型缺省值为 1，它导致这样的控件，该控件对标头中的每一列显示基本字段的名称设置 0 将删除该标头。
说明

HeadLines 属性可以用来在 DBGrid 控件的列标头中显示多于一行的文本。

可以通过为每列显式地设置 Caption 属性来覆盖缺省设置 (1)。


HeadLines 属性示例

这个例子检查复选框的值来确定是否在网格中显示标头。

Private Sub Check1_Click ()

If Check1.Value = vbChecked Then	'如果已检查，

DBGridDataGrid1.HeadLines = 2	'如果已检查，

 '列标头中的两行。

Else

DBGridDataGrid1.HeadLines = 0	'无标头。

End If

End Sub


NumberFormat 属性

返回或设置一个值，指示 DBGrid 控件的 Column 对象的格式字符串。

语法

object.NumberFormat [= value]

NumberFormat 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	字符串表达式定义 Value 属性中的表达式如何被格式化，缺省值为零长度的字符串 ("")。
说明

将此格式用于 Column 对象的 Value 属性上，从而影响 Column 对象的 Text 属性。如果 NumberFormat 被设置为一个非法的字符串，则单元中的数据被显示为 #ERR# 而且在 Value 属性中设置的值保持不变。有关合法的格式字符串的信息，请参阅 Format 函数。


NumberFormat 属性示例

这个例子将 DBGrid 控件中的第二列格式化为 long date：

Private Sub Command1_Click ()

DBGrid1.Columns(1).NumberFormat = "long date"

End Sub


RecordSelectors 属性

返回或设置一个值，指示记录选择器是否被显示在 DBGrid 控件或 Split 对象中。

语法

object.RecordSelectors [= value]

RecordSelectors 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	如“设置值”中所示，确定记录选择器是否被显示的布尔表达式。
设置值

value 的设置值为：

设置	描述
True	显示记录选择器。
False	不显示记录选择器。
说明

当显示时，记录选择器出现在网格或拆分中各行的左边。

如果网格包含多个拆分，则设置其 RecordSelectors 属性与分别单独设置每个拆分的 RecordSelectors 属性相同。

注意   当用户单击记录选择器选定行时，就把选定行的书签添加到 SelBookmarks 集合中。


RowDividerStyle 属性

返回或设置一个值，指定画在选定的 DBGrid 控件的行之间的边框样式。

语法

object.RowDividerStyle [= value]

RowDividerStyle 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	如“设置值”中所示，指定边框样式的整数。
设置值

value 的设置值为：

设置	描述
0	无分界线。
1	黑色线。
2	（缺省）深灰色线。
3	突起的。
4	内陷的。
5	分界线是使用 ForeColor 属性设置的颜色画出的。
说明

RowDividerStyle 属性不影响边框能否被拖动。当边框是突起的或内陷的时候，Microsoft Windows 设置颜色。


RowDividerStyle 属性示例

当单击一个命令按钮时，这个例在不同的行线样式间切换。

Private Sub ChangeStyle_Click ()

If DBGridDataGrid1.RowDividerStyle < 5 Then

DBGridDataGrid1.RowDividerStyle = DBGridDataGrid1.RowDividerStyle + 1

Else

DBGridDataGrid1.RowDividerStyle = 0

End If

End Sub


SelBookmarks 属性

返回一个在 DBGrid 控件中所有选定的记录的书签集合。

语法

object.SelBookmarks

object 所在处代表对象表达式，其值是“应用于”列表中的对象。

说明

当一个记录在 DBGrid 控件中被选定的时候，它的书签被追加到 SelBookmarks 属性所返回的集合中。例如，如果创建 DBGrid 控件所创建的一组 Recordset 对象，则可以用来自 SelBookmarks 集合的书签将分组的 Recordset 重新定位，以处理单个的数据记录。


SelBookmarks 属性示例

这个例子在用户已选定的行间循环并将它们从数据库中删除。

Sub DeleteRows()

Do While DBGrid1.SelBookmarks.Count <> 0

Data1.Recordset.Bookmark = DBGrid1.SelBookmarks(0)

Data1.Recordset.Delete

Data1.Refresh

Loop

End Sub


VisibleCols 属性

返回或设置一个值，指示 DBGrid 控件中可见列数。在设计时不可用，且在运行时是只读的。

语法

object.VisibleCols

VisibleCols 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
说明

VisibleCols 属性是从 0 到全体可用列数的整数，包含全部或部分可见的 DBGrid 控件的列。如 Columns 集合的 Count 属性所确定。

该属性返回当前拆分中可见的列数。返回的值包括全体或部分被显示的列。


VisibleCols 属性示例

这个例子定义按钮将网格向左或向右移动整个一个页面。

Private Sub PageRight_Click ()

'页网格到右边。

If DBGrid1.LeftCol + DBGrid1.VisibleCols < _

 DBGrid1.Columns.Count Then

DBGrid1.LeftCol = DBGrid1.LeftCol + _

 DBGrid1.VisibleCols

End If

End Sub

Private Sub PageLeft_Click ()

'页网格到左边。

If DBGrid1.LeftCol - DBGrid1.VisibleCols >= 0 Then

DBGrid1.LeftCol = DBGrid1.LeftCol - _

 DBGrid1.VisibleCols

End If

End Sub


VisibleRows 属性

返回一个值，指示 DBGrid 控件中可见行数。该属性在运行时是只读的。

语法

object.VisibleRows

object 所在处代表对象表达式，其值是“应用于”列表中的对象。

说明

VisibleRows 属性返回一个整数，其范围从 0 到 DBGrid 控件的 Rows 属性所设置的行数。VisibleRows 属性包含全部或部分可见的 DBGrid 控件行。


VisibleRows 属性示例

这个例子选定在网格中当前可见的所有行。

Private Sub SelectVisible_Click ()

Dim I

For I = 0 To DBGridDataGrid1.VisibleRows - 1

DBGridDataGrid1.SelBookmarks.Add DBGridDataGrid1.RowBookmark(I)

Next I

End Sub


DefaultValue 属性（DBGrid 控件）

为未被连结的 DBGrid 控件中的 Column 对象设置缺省值。

语法

object.DefaultValue [= value]

DefaultValue 属性的语法具有这些部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
value	一个包含指定列缺省值的 Variant 表达式。
说明

DBGrid 控件本身不使用该属性，但将它作为定位符将缺省值与未被绑定的网格中的列联结起来。在 UnboundAddData 事件中，可用这一属性获得列的缺省值，这些列不是终端用户提供的。这样的列包含对应的 RowBuffer.Value 属性数组中的 Null 变体。也可将该属性当作列的标记使用（不管列是被绑定还是未被绑定）。可存储任意值并能在以后检索它们。


Change 事件（占位符）


Click 事件（占位符）


DblClick 事件（占位符）


DragDrop 事件（占位符）


DragOver 事件（占位符）


KeyDown 事件（占位符）


KeyPress 事件（占位符）


KeyUp 事件（占位符）


MouseDown 事件（占位符）


MouseMove 事件（占位符）


MouseUp 事件（占位符）


OLECompleteDrag 事件（占位符）


OLEDragDrop 事件（占位符）


OLEDragOver 事件（占位符）


OLEGiveFeedback 事件（占位符）


OLESetData 事件（占位符）


OLEStartDrag 事件（占位符）


Refresh 方法（占位符）


OLEDrag 方法（占位符）


Appearance 属性（占位符）


BackColor 属性（占位符）


Caption 属性（占位符）


Enabled 属性（占位符）


Font 属性（占位符）


ForeColor 属性（占位符）


IntegralHeight 属性（占位符）


Locked 属性（占位符）


MouseIcon 属性（占位符）


MousePointer 属性（占位符）


OLEDragMode 属性（占位符）


OLEDropMode 属性（占位符）


SelLength 属性（占位符）


SelStart 属性（占位符）


SelText 属性（占位符）


Style 属性（占位符）


Text 属性（占位符）


未找到关键字

不能在 Visual Basic 帮助中找到已选择的关键字。可能是该关键字拼写有误、过多或过少选择文本、或所要寻求帮助的词不是有效的 Visual Basic 关键字。

要获得关于特定关键字的帮助，最简单的方法就是把插入点放到想要获得帮助的关键字内的任何地方，然后按 F1 键。不必选中该关键字。事实上，如果只选中了关键字的一部分，或超过了一个单词，“帮助”将不能找到要查找的内容。

要使用内置的“帮助”查找对话框，请按下工具栏上的“帮助主题”按钮。


Left、Top 属性（占位符）


Height、Width 属性（占位符）


Tag 属性（占位符）


ToolTipText 属性（占位符）


Count 属性（占位符）


Item 方法（占位符）


Hwnd 属性（占位符）


TabStop 属性（占位符）


Visible 属性（占位符）


Picture 属性（占位符）


Max, Min 属性（占位符）


Add 方法（占位符）


Clear 方法（占位符）


Container 属性（占位符）


控件集合（占位符）


Copies 属性（占位符）


DataBinding 对象（占位符）


DataBindings 集合（占位符）


Filename 属性（占位符）


FontBold、FontItalic、FontStrikeThru 属性（占位符）


FontName 属性（占位符）


FontSize 属性（占位符）


GetData 方法（占位符）


GetFormat 方法（占位符）


HelpFile 属性（占位符）


Item 属性（占位符）


Remove 方法（占位符）


SetData 方法（占位符）


Align 属性（占位符）


DragIcon 属性（占位符）


DragMode 属性（占位符）


HelpContextID 属性（占位符）


TabIndex 属性（占位符）


Alignment 常数（占位符）


Border 属性常数（占位符）


BorderStyle 常数（占位符）


BorderStyle 属性（ActiveX 控件）（占位符）


Clear 方法（ActiveX 控件）（占位符）


Clipboard 对象常数（占位符）


Color 常数（占位符）


CommonDialog 控件常数（占位符）


CommonDialog 错误常数（占位符）


Control 常数（占位符）


DataBindings 属性（占位符）


DDE 常数（占位符）


Drag-and-Drop 常数（占位符）


Drawing 常数（占位符）


FetchVerbs 方法（占位符）


Form 常数（占位符）


Graphics 常数（占位符）


Grid 控件常数（占位符）


Help 常数（占位符）


HideSelection 属性（ActiveX 控件）（占位符）


HideSelection 属性（占位符）


Image 属性（ActiveX 控件）（占位符）


ImageList 属性（ActiveX 控件）（占位符）


Index 属性（ActiveX 控件）（占位符）


Index 属性（占位符）


Key Code 常数（占位符）


Key 属性（ActiveX 控件）（占位符）


Menu Accelerator 常数（占位符）


Menu Control 常数（占位符）


Miscellaneous 常数（占位符）


MousePointer 常数（占位符）


OLE Container Control 常数（占位符）


Picture Object 常数（占位符）


Printer Object 常数（占位符）


RasterOp 常数（占位符）


Remove 方法（ActiveX 控件）（占位符）


ShowInTaskbar 属性（占位符）


ShowTips 属性（ActiveX 控件）（占位符）


ShowWhatsThis 方法（占位符）


Text 属性（ActiveX 控件）（占位符）


Value 属性（ActiveX 控件）（占位符）


Variant Type 常数（占位符）


Visual Basic 常数（占位符）


WhatsThisButton 属性（占位符）


WhatsThisHelp 属性（占位符）


WhatsThisHelpID 属性（占位符）


WhatsThisMode 方法（占位符）


Windows 95 控件常数（占位符）


ColIsVisible 属性（占位符）


ColPos 属性（占位符）


DataObject 对象（占位符）


DataObjectFiles 集合（占位符）


DataSource 属性（占位符）


Drag 方法（占位符）


DrawMode 属性（占位符）


FixedAlignment 属性（占位符）


GotFocus 事件（占位符）


GridLineWidth 属性（占位符）


Index 属性（控件数组）（占位符）


LostFocus 事件（占位符）


Move 方法（占位符）


Name 属性（占位符）


Object 属性（占位符）


Parent 属性（占位符）


RowColChange 事件（占位符）


RowIsVisible 属性（占位符）


RowPos 属性（占位符）


SetFocus 方法（占位符）


ZOrder 方法（占位符）


Files 方法（占位符）


Connect 事件（占位符）


HScrollSmallChange、VScrollSmallChange 属性（占位符）


MinHeight、MinWidth 属性（占位符）


“属性页”对话框（占位符）


RemoteHost 属性（占位符）


RemotePort 属性（占位符）


ViewportHeight、ViewportLeft、ViewportTop、ViewportWidth 属性（占位符）


Resync 方法（远程数据）（占位符）


ContainedVBControls 集合（占位符）


Member 对象（占位符）


Members 集合（占位符）


VBComponentsEvents 对象（占位符）


VBProjectsEvents 对象（占位符）


Files 属性（占位符）


Alignment 属性（占位符）


AboutBox 方法（占位符）


Col, Row 属性（占位符）


RowHeight 属性（占位符）


Scroll 事件（占位符）


ScrollBars 属性（占位符）


SelEndCol, SelStartCol, SelEndRow, SelStartRow 属性（占位符）


Appearance 属性 (ActiveX 控件) (placeholder)


BackColor, ForeColor 属性 (ActiveX 控件) (placeholder)


BorderStyle 常数 (ActiveX 控件) (placeholder)


Caption 属性 (ActiveX 控件) (placeholder)


Change 事件 (ActiveX 控件) (placeholder)


Clear 方法 (ActiveX 控件) (placeholder)


Click 事件 (ActiveX 控件) (placeholder)


Clipboard Object 常数 (ActiveX 控件) (placeholder)


Count 属性 (ActiveX 控件) (placeholder)


DataObject Object (ActiveX 控件) (placeholder)


DataObjectFiles 集合 (ActiveX 控件) (placeholder)


DataSource 属性 (ActiveX 控件) (placeholder)


DblClick 事件 (ActiveX 控件) (placeholder)


Drag-and-Drop 常数 (ActiveX 控件) (placeholder)


Enabled 属性 (ActiveX 控件) (placeholder)


FetchVerbs 方法 (ActiveX 控件) (placeholder)


Files 方法 (ActiveX 控件) (placeholder)


Font 属性 (ActiveX 控件) (placeholder)


FontName 属性 (ActiveX 控件) (placeholder)


FontSize 属性 (ActiveX placeholder)


GetData 方法 (ActiveX 控件) (placeholder)


GetFormat 方法 (ActiveX 控件) (placeholder)


HideSelection 属性 (ActiveX 控件) (complaceholder)


hWnd 属性 (ActiveX 控件) (placeholder)


Item 方法 (ActiveX 控件) (placeholder)


Key Code 常数 (ActiveX 控件) (placeholder)


Key 属性 (ActiveX 控件) (complaceholder)


KeyDown, KeyUp 事件 (ActiveX 控件) (placeholder)


KeyPress 事件 (ActiveX 控件) (placeholder)


Max, Min 属性 (ActiveX 控件) (placeholder)


MouseDown, MouseUp 事件 (ActiveX 控件) (placeholder)


MouseIcon 属性 (ActiveX 控件) (placeholder)


MouseMove 事件 (ActiveX 控件) (placeholder)


MousePointer 常数 (ActiveX 控件) (placeholder)


MousePointer 属性 (ActiveX 控件) (placeholder)


OLECompleteDrag 事件 (ActiveX 控件) (placeholder)


OLEDrag 方法 (ActiveX 控件) (placeholder)


OLEDragDrop 事件 (ActiveX 控件) (placeholder)


OLEDragMode 属性 (ActiveX 控件) (placeholder)


OLEDragOver 事件 (ActiveX 控件) (placeholder)


OLEDropMode 属性 (ActiveX 控件) (placeholder)


OLEGiveFeedback 事件 (ActiveX 控件) (placeholder)


OLESetData 事件 (ActiveX 控件) (placeholder)


OLEStartDrag 事件 (ActiveX 控件) (placeholder)


Picture 属性 (ActiveX 控件) (placeholder)


属性页对话框 (ActiveX 控件) (placeholder)


RemoteHost 属性 (ActiveX 控件) (placeholder)


RemotePort 属性 (ActiveX 控件) (placeholder)


SelLength, SelStart, SelText 属性 (ActiveX 控件) (placeholder)


SetData 方法 (ActiveX 控件) (placeholder)


ShowTips 属性 (ActiveX 控件) (complaceholder)


Text 属性 (ActiveX 控件) (complaceholder)


Value 属性 (ActiveX 控件) (complaceholder)


hDC 属性 (ActiveX 控件) (complaceholder)


Height, Width 属性 (ActiveX 控件) (complaceholder)


Index 属性 (ActiveX 控件) (complaceholder)


Left, Top 属性 (ActiveX 控件) (complaceholder)


Tag 属性 (ActiveX 控件) (complaceholder)


Visible 属性 (ActiveX 控件) (complaceholder)


Remove 方法 (ActiveX 控件) (complaceholder)


Object 属性 (ActiveX 控件) (placeholder)


属性页 (ActiveX 控件) (placeholder)


字体不存在 (错误 24574) (公用对话框控件) (complaceholder)


帮助内容placeholder


BorderStyle 属性 (ActiveX 控件) (placeholder)


RightToLeft 属性 (ActiveX 控件) (placeholder)


Refresh 方法 (ActiveX 控件) (placeholder)