默认情况下,DataGrid 控件包含一个 Split 对象。防止最终用户添加拆分的代码为:
DataGrid1.Splits(0).AllowSizing = False
在程序中添加和删除拆分
DataGrid 控件包含一个 Split 对象的集合。要在程序中添加拆分,可以使用 Add 方法,如下所示:
DataGrid1.Splits.Add 1
注意 Add 方法需要新的拆分索引作为其参数。要添加一个拆分,应将这个索引参数设置为 Splits 集合的 Count 属性值。
使用 Split 集合的 Add 方法,可以在程序中按照实际需要添加拆分。由于添加多于两个以上的拆分将使网格很难使用,可以使用该集合的 Count 属性来限制拆分的数目。
If DataGrid1.Splits.Count 3 Then ' 添加一个拆分。 DataGrid1.Splits.Add DataGrid1.Splits.CountEnd If
使拆分同步
当拆分多于一个时,可能希望控制这些拆分如何滚动。例如,在一个具有三个拆分的网格中,可以决定只让第一个和第三个拆分同步,而让中间的拆分独立地滚动。要同步任何两个(或多个)拆分,只需将每个 Split 对象的 ScrollGroup 属性设置为同一个值。
' 使第一个和第三个 Split 对象同步。
With DataGrid1 .Splits(0).ScrollGroup = 1.Splits(1).ScrollGroup = 2.Splits(2).ScrollGroup = 1End 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 "ProductName" Then DataGrid1.Splits(0).Columns(i).Visible = False End IfNext i' 隐藏除 UnitPrice 列之外的所有列。For i = 0 To DataGrid1.Splits(0).Columns.Count - 1 If DataGrid1.Splits(1).Columns(i).DataField "UnitPrice" Then DataGrid1.Splits(1).Columns(i).Visible = False End IfNext I