VB控件教程文档格式.docx
《VB控件教程文档格式.docx》由会员分享,可在线阅读,更多相关《VB控件教程文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
DataGrid控件不支持DBGrid的“解除绑定模式”概念。
DBGrid控件包括在VisualBasic的Tools目录中。
2、可能的用法查看和编辑在远程或本地数据库中的数据。
与另一个数据绑定的控件(诸如DataList控件)联合使用,使用DataGrid控件来显示一个表的记录,这个表通过一个公共字段链接到由第二个数据绑定控件所显示的表。
使用DataGrid控件的设计时特性可以不编写任何代码,只通过使用DataGrid控件的设计时特性来创建一个数据库应用程序。
下面的说
在运行时,可以将DataSource属性重新设置为一个不同的数据源。
例如,您可能具有若干个ADOData控件,每个控件连接不同的数据库,或设置为不同的RecordSource属性。
可以简单地将DataSource从一个ADOData控件重新设置为另一个ADOData控件:
'
'
将DataSource重新设置为一个连接到Pubs数据库的、'
使用Authors表的ADOData控件。
明概要地说明了在实现DataGrid控件的典型应用时的一般步骤。
完整的循序渐进的指示,请参阅主题“DataGrid方案1:
使用DataGrid控件创建一个简单数据库应用程序”。
要在设计时实现一个DataGrid控件1.为要访问的数据库创建一个Microsoft数据链接(.MDL)文件。
请参阅“创建NorthwindOLEDB数据链接”主题,以获得一个示例。
2.在窗体上放置一个ADOData控件,并将其ConnectionString属性设置为在第1步中所创建的OLEDB数据源。
3.在这个AdoData控件的RecordSource属性中输入一条将返回一个记录集的SQL语句。
例如,Select*FromMyTableNameWhereCustID=124.在窗体上放置一个DataGrid控件,并将其DataSource属性设置为这个ADOData控件。
5.右键单击该DataGrid控件,然后单击“检索字段”。
6.右键单击该DataGrid控件,然后单击“编辑”。
7.重新设置该网格的大小、删除或添加网格的列。
8.右键单击该DataGrid控件,然后单击“属性”。
9.使用“属性页”对话框来设置该控件的适当的属性,将该网格配置为所需的外观和行为。
在运行时更改显示的数据在创建了一个使用设计时特性的网格后,也可以在运行时动态地更改该网格的数据源。
下面介绍实现这一功能的通常方法。
3、更改DataSource的RecordSource更改所显示的数据的最通常方法是改变该DataSource的查询。
例如,如果DataGrid控件使用一个ADOData控件作为其DataSource,则重写RecordSource和刷新该ADOData控件都将改变所显示的数据。
ADOData控件连接的是Northwind数据库的'
Products表。
新查询查找所有'
SupplierID=12的记录。
DimstrQueryAsStringstrQuery="
SELECT*FROMSuppliersWHERESupplierID=12"
Adodc1.RecordSource=strQueryAdodc1.Refresh4、更改DataSource
当一个列使用NumberFormat属性设置格式后,CellText和CellValue属性是很有用的。
NumberFormat属性不必更改实际的数据格式就可以更改任何包含数字的列的格式。
例如,给定一个网格,其中包含一个名为ProductID的、包含整数的列。
下面的代码将使DataGrid以"
P-0000"
的格式来显示数据。
换句话说,尽管在ProductID字段中所包含的实际数值为"
3"
,但该网格所显示的值将是"
P-0003"
。
PrivateSubForm_Load()DataGrid1.Columns("
ProductID"
).NumberFormat="
EndSub要返回数据库中所包含的实际值,应使用CellValue方法,如下所示:
PrivateSubDataGrid1_RowColChange(LastRowAsVariant,ByValLastColAsInteger)Debug.Print_DataGrid1.Columns("
).CellValue(DataGrid1.Bookmark)EndSub注意上面所用的CellValue和下面所用的CellText值,都需要将Bookmark属性作为一个参数,功能才正确。
相反地,如果要返回该字段的格式化的值,应使用CellText方法:
).CellText(DataGrid1.Bookmark)EndSubSetDataGrid1.DataSource=adoPubsAuthors5、当将DataGrid控件用于一个远程数据库,诸如SQLServer时,可以改变表的结构。
例如,可以给这个表添加一个字段。
在这种情形下,可以调用Rebind方法根据新的结构来重新创建该网格。
注意,如果已经在设计时改变了这个列的布局,DataGrid控件将会试图重新创建当前的布局,包括任何空的列。
不过,通过首先调用ClearFields方法,可以强制该网格重新设置所有的列。
从DataGrid返回值在DataGrid被连接到一个数据库后,可能想要监视用户单击了哪一个单元。
可以使用RowColChange事件——而不是Click事件。
如下所示:
PrivateSubDataGrid1_RowColChange(LastRowAsVariant,ByValLastColAsInteger)'
显示用户所单击的单元的文字、行和列的信息。
Debug.PrintDataGrid1.Text;
DataGrid1.Row;
DataGrid1.ColEndSub6、重新绑定DataSource使用CellText和CellValue方法
注意上面的CellText方法等价于使用DataGrid控件的Text属性。
添加、删除或隐藏列通过使用Columns集合和Column对象的属性和方法,可以在程序中添加、删除或隐藏列。
添加和删除一列要在运行时添加一列,可以使用Add方法。
如果首先声明一个变量,并将新对象赋给该变量,就可以用简明的代码设置各种属性。
PrivateSubAddColumn()'
在最右边的位置添加一列。
然后设置其Visible、Width、'
Caption以及Alignment属性。
DataField属性则指定'
该列将绑定到哪一个字段。
DimcAsColumnSetc=DataGrid1.Columns.Add(DataGrid1.Columns.Count)Withc.Visible=True.Width=1000.Caption="
我的新列"
.DataField=Adodc1.Recordset.Fields("
ProductName"
).Name.Alignment=dbgRightEndWithEndSub可以使用方法来删除任意一列。
请确保使用ColIndex参数来指定要删除的列。
下面的代码将删除被单击的列。
PrivateSubDataGrid1_HeadClick(ByValColIndexAsInteger)DataGrid1.Columns.RemoveColIndexEndSub
隐藏一列通过将Visible属性设置为False,可以隐藏任意一列。
当想要限制用户可以查看或编辑的列时这一功能特别有用。
下面的示例在Columns集合中循环,隐藏除少数列之外的所有列。
PrivateSubHideColumns()'
使用DataField属性来判别正在测试的是哪一列。
只显示三列:
ProductName、UnitPrice以及'
UnitsInStock。
DimcAsColumnForEachcInDataGrid1.ColumnsSelectCasec.DataFieldCase"
c.Visible=True
Case"
UnitPrice"
c.Visible=TrueCase"
UnitsInStock"
c.Visible=Truec.Caption="
InStock"
更改这个列的标头。
CaseElse'
隐藏其它所有的列。
c.Visible=FalseEndSelectNextcEndSub
操作DataGrid视图一个“拆分”的网格使最终用户对相同的数据可以拥有多个视图。
例如,假设有一个由十个字段组成的大表。
在这种情况下,在控件中察看的记录集将有十列宽,除非窗体非常宽,否则用户将无法同时看见所有列的内容。
,而且,假设用户只对第一列和最后一列感兴趣(例如,第一列是名字,最后一列是电话号码)。
为了能同时看到在两端的列(不重新安排列的顺序),可以对网格进行拆分。
创建一个Split对象在设计时,可以创建一个拆分,具体步骤是:
右键单击网格,单击“编辑”,再单击右键,然后单击“拆分”。
通过右键单击该控件,并单击“属性”来显示“属性页”对话框,可以编辑这个拆分。
可以使用“拆分”选项卡来自定义拆分。
要删除一个拆分,右键单击该拆分,并单击“删除”。
在运行时,最终用户也可以通过单击位于这个网格控件的左下边的右边的选项卡,以手工方式来拆分该网格(除非不允许这个操作),如下图所示:
默认情况下,DataGrid控件包含一个Split对象。
防止最终用户添加拆分的代码为:
DataGrid1.Splits(0).AllowSizing=False
在程序中添加和删除拆分DataGrid控件包含一个Split对象的集合。
要在程序中添加拆分,可以使用Add方法,如下所示:
DataGrid1.Splits.Add1注意Add方法需要新的拆分索引作为其参数。
要添加一个拆分,应将这个索引参数设置为Splits集合的Count属性值。
使用Split集合的Add方法,可以在程序中按照实际需要添加拆分。
由于添加多于两个以上的拆分将使网格很难使用,可以使用该集合的Count属性来限制拆分的数目。
IfDataGrid1.Splits.Count<
3Then'
添加一个拆分。
DataGrid1.Splits.AddDataGrid1.Splits.CountEndIf
使拆分同步当拆分多于一个时,可能希望控制这些拆分如何滚动。
例如,在一个具有三个拆分的网格中,可以决定只让第一个和第三个拆分同步,而让中间的拆分独立地滚动。
要同步任何两个(或多个)拆分,只需将每个Split对象的ScrollGroup属性设置为同一个值。
使第一个和第三个Split对象同步。
WithDataGrid1.Splits(0).ScrollGroup=1.Splits
(1).ScrollGroup=2.Splits
(2).ScrollGroup=1EndWith通过设置Scrollbars属性,使同步的拆分组只显示一个滚卷条,从而进一步自定义拆分的外观。
控制Tab键和箭头键的行为使用WrapCellPointer、TabAcrossSplits以及TabAction属性,可以决定当最终用户按下tab键或箭头键时网格的行为。
在这三个属性中,TabAction属性级别最高,它决定WrapCellPointer和TabAcrossSplits这两个属性是否能生效。
TabAction有三个设置值:
ControlNavigation、ColumnNavigation和GridNavigation。
当该属性设置为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属性
进行测试。
如果测试失败,则隐藏这一列。
DimiAsInteger
隐藏除ProductName列之外的所有列。
Fori=0ToDataGrid1.Splits(0).Columns.Count-1IfDataGrid1.Splits(0).Columns(i).DataField<
>
"
ThenDataGrid1.Splits(0).Columns(i).Visible=FalseEndIfNexti
隐藏除UnitPrice列之外的所有列。
Fori=0ToDataGrid1.Splits(0).Columns.Count-1IfDataGrid1.Splits
(1).Columns(i).DataField<
ThenDataGrid1.Splits
(1).Columns(i).Visible=FalseEndIfNextI
使用Bookmarks和SelBookmarks跟踪记录Bookmarks和SelBookmarks提供了标记记录的一种手段。
当编写应用程序中的特定功能(诸如允许最终用户手工地选择多个不相邻的记录,进行所选记录的大批更新)时,这就很有必要。
在这些情形中,需要标记哪些记录已被选择,因此可以使用SelBookmarks集合及其属性。
有两个函数,分别是CellText和CellValue方法,需要标记才能正确执行。
标记用户的选择SelBookmarks集合包含所有选定的记录的书签。
当最终用户手工选择记录时(即在单击时按住CTRL键),每一个选定的记录的书签都会加入到该集合中。
使用标准的循环,用户可以知道已经选定了什么,也可以保存书签(因为可能需要恢复某个值),以及执行操作:
DimiasInteger'
计数器DimintCountAsIntegerintCount=DataGrid1.SelBookmarks.Count-1ReDimarrSelBK(intCount)'
声明用于保存书签的数组。
Fori=0TointCountArrSelBK(i)=DataGrid1.SelBookmarks(i)'
在此处执行操作。
如果该操作必须被'
取消,则退出该循环,然后使用该数'
组来取消这些更改。
Nexti
通过在程序中添加到SelBookmarks集合来选择记录通过将记录添加到这个集合,也可以在程序中选定记录。
例如,可能有一个显示指定的客户所有订货的网格。
如果要高亮显示该客户花费超过$100的所有记录,则对记录进行过滤,并将结果
书签添加到SelBookmarks集合。
DimrsAsRecordsetSetrs=Adodc1.Recordset
WhileNotrs.EOFIfrs!
SupplierID=12ThenDataGrid1.SelBookmarks.Addrs.BookmarkEndIfrs.MoveNextWend
显示计算结果字段假设在表中有一个名为"
Price"
的字段,并且想使用本地税率来计算表中每一项的税费。
这就是一个计算结果字段,可以通过修改DataSource的查询来计算这个值,并把这个值返回给DataGrid控件。
要在DataGrid控件中创建一个计算结果字段1.确认在机器上已为Northwind数据库建立了一个OLEDB数据源;
如果还没有创建这样的一个数据源,请按照“创建Northwind的OLEDBData连接”的步骤操作。
2.在窗体上放置一个ADOData控件和一个DataGrid控件。
3.将ADOData控件的ConnectionString属性设置为Northwind的数据源。
4.设置ADOData控件的RecordSource属性。
在“属性”窗口中,单击“记录源”并输入SelectProductName,UnitPrice,(UnitPrice*.082)AsTaxFromProducts。
5.将DataGrid控件的DataSource属性设置为这个ADOData控件。
6.运行该工程。
与类模块一起使用DataGrid控件如果想要访问以自定义格式或以ODBC驱动程序不直接支持的格式存放的数据,可以创建一个类来封装该数据。
然后可以编写该类的自定义函数来检索这些数据。
这样该类就变成了一种数据源,可以被任何数据使用者(如DataGrid控件)使用。
在这个类模块的Initialize事件中,首先通过声明一个作为NewADODB.Recordset的变量,来创建一个ADODBrecordset对象。
在创建了这个recordset对象后,再添加字段,每个数据源中的每个字段都要加入。
然后使用合适的数据填充这个记录集。
注意也可以使用OLEDB示例提供者来创建一个数据源。
关于OLEDB示例提供者的详细信息,请参阅“创建带有数据提供方的部件”。
类模块有一个GetDataMember事件,只要当数据使用者(诸如DataGrid控件)需要数据时就产生该事件。
在这个事件中,Data参数被设置为在Initialize事件中所创建的recordset对象。
如果要使用这个类模块,应创建一个具有一个DataGrid控件的窗体。
在该窗体的Load事件的代码中,将该控件的DataSource属性设置为这个类。
注意数据类模块在设计时是不可用的。
例如,如果使用DataGrid控件,则当用户在“属性”
窗口中单击“数据源”时,所有可用的数据源都会出现在一个下拉列表中。
但其中不会有这个数据类模块,它只能在代码中设置。
使用类模块创建一个数据源下面的示例使用一个类模块来创建一个简单数据源。
然后通过DataSource属性将DataGrid控件绑定到该模块。
要创建一个用于DataGrid的类1.创建一个新的标准Exe工程。
2.给窗体添加一个DataGrid控件。
如果DataGrid控件不在“工具箱”中,则在“工程”菜单中单击“部件”,再单击“MicrosoftDataGridControl”,然后单击“确定”。
3.在“工程”菜单中,单击“引用”。
在“引用”对话框中,单击“MicrosoftActiveXDataObjects2.0Library”。
4.在“工程”菜单中,单击“添加类模块”来给工程添加一个数据类模块。
5.在“工程资源管理器”窗口中,单击并选定“类”图标,并按F4键显示“属性”窗口。
6.在“属性”窗口中,将类的名称更改为NamesData。
7.在“属性”窗口中,单击