在本节的应用方案介绍了如何对 Hierarchical FlexGrid 中的数据进行排序和合并。在大多数情况下,可以通过将数据库下载到 Hierarchical FlexGrid 的方式来访问数据。不过,在这里示例数据通过“代码编辑器”窗口填写到 Hierarchical FlexGrid 的行与列中。
要建立数据显示
要完成本方案,请依次执行本节中的各个步骤。
使用下表中的设置值,设置列数与行数、字体信息,并为 Hierarchical FlexGrid 创建列标头。
MSHFlexGrid 控件
属性 | 设置值 |
Name | Fg1 |
Cols | 4 |
Rows | 20 |
MergeCells | 2 – Restrict Rows |
FormatString | <Region |<Product |<Employees |>Sales |
FontName | Arial |
使用下面的过程完成 Hierarchical FlexGrid 中的数据排序与合并。
排序与合并数据
Sub Form_Load () Dim I As Integer '
创建数组。For i = Fg1.FixedRows To Fg1.Rows - 1
'
地区。Fg1.TextArray(fgi(i, 0)) = RandomString(0)
'
产品。Fg1.TextArray(fgi(i, 1)) = RandomString(1)
'
雇员。Fg1.TextArray(fgi(i, 2)) = RandomString(2)
Fg1.TextArray(fgi(i, 3)) = _
Format(Rnd * 10000, "#.00")
Next
'
设置合并。Fg1.MergeCol(0) = True
Fg1.MergeCol(1) = True
Fg1.MergeCol(2) = True
'
排序以查看效果。DoSort
' Format Grid
Fg1.ColWidth(0) = 1000
Fg1.ColWidth(1) = 1000
Fg1.ColWidth(2) = 1000
Fg1.ColWidth(3) = 1000
End Sub
Function Fgi (r As Integer, c As Integer) As Integer Fgi = c + Fg1.Cols * r End Function Sub DoSort () Fg1.Col = 0 Fg1.ColSel = Fg1.Cols - 1 Fg1.Sort = 1 '
一般为升序。End Sub
Function RandomString (kind As Integer) Dim s As String Select Case kind Case 0 '
地区。Select Case (Rnd * 1000) Mod 5
Case 0: s = "1. Northwest"
Case 1: s = "2. Southwest"
Case 2: s = "3. Midwest"
Case 3: s = "4. East"
Case Else: s = "5. Overseas"
End Select
Case 1 '
产品。Select Case (Rnd * 1000) Mod 5
Case 0: s = "1. Chai"
Case 1: s = "2. Peppermint"
Case 2: s = "3. Chamomile"
Case Else: s = "4. Oolong"
End Select
Case 2 '
雇员。Select Case (Rnd * 1000) Mod 4
Case 0: s = "Clare"
Case 1: s = "Tiffany"
Case 2: s = "Sally"
Case Else: s = "Lori"
End Select
End Select
RandomString = s
End Function
如果在此时运行工程,则将显示窗体如下:
接着,您需要允许用户重新组织数据。也就是说,您必须允许 Hierarchical FlexGrid 切换数据组织视图。
Sub Fg1_MouseDown (Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Fg1.Tag = ""
If Fg1.MouseRow <> 0 Then Exit Sub
Fg1.Tag = Str(Fg1.MouseCol)
MousePointer = vbSizeWE
End Sub
Sub Fg1_MouseUp (Button As Integer, Shift As _
Integer, X As Single, Y As Single)
MousePointer = vbDefault
If Fg1.Tag = "" Then Exit Sub
Fg1.Redraw = False
Fg1.ColPosition(Val(Fg1.Tag)) = Fg1.MouseCol
DoSort
Fg1.Redraw = True
End Sub
一旦完成了该方案中的过程,则当您在运行时无论合适将列拖动到新位置时,数据都重新组织。例如,如果您将 Employee 列拖动到左边,它将会以如下方式出现: