使用列
通过更改DataSource属性,可以动态地更改在DataGrid控件中显示的数据。例如,可以显示同一个数据库的不同表。如果这样做,则DataGrid控件将只根据默认的属性显示数据。
添加、删除或隐藏列
通过使用Columns集合和Column对象的属性和方法,可以在程序中添加、删除或隐藏列。
添加和删除一列
要在运行时添加一列,可以使用Add方法。如果首先声明一个变量,并将新对象赋给该变量,就可以用简明的代码设置各种属性。
PrivateSubAddColumn()
在最右边的位置添加一列。然后设置其Visible、Width、
Caption以及Alignment属性。DataField属性则指定
该列将绑定到哪一个字段。
DimcAsColumn
Setc=DataGrid1.Columns.Add(DataGrid1.Columns.Count)
Withc
.Visible=True
.Width=1000
.Caption="我的新列"
.DataField=Adodc1.Recordset.Fields("ProductName").Name
.Alignment=dbgRight
EndWith
EndSub
可以使用方法来删除任意一列。请确保使用ColIndex参数来指定要删除的列。下面的代码将删除被单击的列。
PrivateSubDataGrid1_HeadClick(ByValColIndexAsInteger)
DataGrid1.Columns.RemoveColIndex
EndSub
隐藏一列
通过将Visible属性设置为False,可以隐藏任意一列。当想要限制用户可以查看或编辑的列时这一功能特别有用。下面的示例在Columns集合中循环,隐藏除少数列之外的所有列。
PrivateSubHideColumns()
使用DataField属性来判别正在测试的是哪一列。
只显示三列:ProductName、UnitPrice以及
UnitsInStock。
DimcAsColumn
ForEachcInDataGrid1.Columns
SelectCasec.DataField
Case"ProductName"
c.Visible=True
Case"UnitPrice"
c.Visible=True
Case"UnitsInStock"
c.Visible=True
c.Caption="InStock" 更改这个列的标头。
CaseElse 隐藏其它所有的列。
c.Visible=False
EndSelect
Nextc
EndSub
操作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.Count
EndIf
使拆分同步
当拆分多于一个时,可能希望控制这些拆分如何滚动。例如,在一个具有三个拆分的网格中,可以决定只让第一个和第三个拆分同步,而让中间的拆分独立地滚动。要同步任何两个(或多个)拆分,只需将每个Split对象的ScrollGroup属性设置为同一个值。
使第一个和第三个Split对象同步。
WithDataGrid1
.Splits(0)
.ScrollGroup=1
.Splits(1).ScrollGroup=2
.Splits(2).ScrollGroup=1
EndWith
通过设置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-1
IfDataGrid1.Splits(0).Columns(i).DataField<>"ProductName"Then
DataGrid1.Splits(0).Columns(i).Visible=False
EndIf
Nexti
隐藏除UnitPrice列之外的所有列。
Fori=0ToDataGrid1.Splits(0).Columns.Count-1
IfDataGrid1.Splits(1).Columns(i).DataField<>"UnitPrice"Then
DataGrid1.Splits(1).Columns(i).Visible=False
EndIf
NextI
->