好文档 - 专业文书写作范文服务资料分享网站

VB控件教程大全

天下 分享 时间: 加入收藏 我要投稿 点赞

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 <> \ 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 <> \ 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

显示计算结果字段

假设在表中有一个名为 \就是一个计算结果字段,可以通过修改 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 \

Set rsNames = New ADODB.RecordSet ' 设置对象变量。 ' 创建一个具有两个字段的 recordset,并打开该 recordset。 ' 第一个记录具有一个整数的数据类型,第二个记录是一个最大可 ' 达 256 个字符的字符串。CursorType 被设置为 OpenStatic ' —— 一个可更新的对一组记录的快照。LockType 被设置为 ' LockOptimistic,以允许对该 recordset 进行更新。 With rsNames

.Fields.Append \ .Fields.Append \ .CursorType = adOpenStatic .LockType = adLockOptimistic .Open End With

Dim i As Integer

For i = 1 to 10 ' 添加十条记录。 rsNames.AddNew rsNames!ID = i

rsNames!Name = \ 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 键运行该工程。 二、访问 Hierarchical FlexGrid 控件

要在 Visual Basic 中安装并访问 Hierarchical FlexGrid 控件,请使用以下步骤。 要安装和访问 Hierarchical FlexGrid 控件

1. 在“工程”菜单中,选择“部件”。出现“部件”对话框。

2. 在“控件”选项卡中,选择“Microsoft Hierarchical FlexGrid Control 6.0”,然后单击“确定”。MSHFlexGrid 控件被添加到 Visual Basic 工具箱中。

3. 在 Visual Basic 工具箱中,单击 MSHFlexGrid 控件,然后将其拖到一个 Visual Basic 窗体上。

VB控件教程大全

DataGrid1.Splits.AddDataGrid1.Splits.CountEndIf使拆分同步当拆分多于一个时,可能希望控制这些拆分如何滚动。例如,在一个具有三个拆分的网格中,可以决定只让第一个和第三个拆分同步,而让中间的拆分独立地滚动。要同步任何两个(或多个)拆分,只需将每个Split对象的ScrollGroup属性
推荐度:
点击下载文档文档为doc格式
9goo556fo51lh1d7s72f
领取福利

微信扫码领取福利

微信扫码分享