我已在程序中设置了msflexgrid.sort = 9 ,请问,要如何写Compare事件中的代码才能实现自定义对一指定列进行排序,最好能给出一段代码来。谢谢!

解决方案 »

  1.   

    这是我根据实际需求编写的一段代码,你参考一下吧
    Dim i, startCol As Integer    If row1 > 1 Then
            With HGrid
                For i = 1 To 2
                    'Debug.Print hgrid.TextMatrix(0, i)
                    If HGrid.TextMatrix(0, i) = "单位名称" Then
                        startCol = i
                        Exit For
                    End If
                Next i
                  
                startCol = startCol + 1
                If IsNumeric(.TextMatrix(3, CurCol)) Then
                    If bSort = False Then
                        'If .TextMatrix(Row1, curCol) > .TextMatrix(Row1, curCol) Then
                        If CCur(.TextMatrix(row1, CurCol)) > CCur(.TextMatrix(row2, CurCol)) Then
                            Cmp = 1
                        ElseIf CCur(.TextMatrix(row1, CurCol)) < CCur(.TextMatrix(row2, CurCol)) Then
                            Cmp = -1
                        Else
                            If .TextMatrix(row1, 1) > .TextMatrix(row2, 1) Then
                                Cmp = 1
                            ElseIf .TextMatrix(row1, 1) < .TextMatrix(row2, 1) Then
                                Cmp = -1
                            Else
                                If CCur(.TextMatrix(row1, startCol)) > CCur(.TextMatrix(row2, startCol)) Then
                                    Cmp = 1
                                ElseIf CCur(.TextMatrix(row1, startCol)) < CCur(.TextMatrix(row2, startCol)) Then
                                    Cmp = -1
                                Else
                                    Cmp = 0
                                End If
                            End If
                        End If
                    ElseIf bSort = True Then
                        If CCur(.TextMatrix(row1, CurCol)) > CCur(.TextMatrix(row2, CurCol)) Then
                            Cmp = -1
                        ElseIf CCur(.TextMatrix(row1, CurCol)) < CCur(.TextMatrix(row2, CurCol)) Then
                            Cmp = 1
                        Else
                            If .TextMatrix(row1, 1) > .TextMatrix(row2, 1) Then
                                Cmp = -1
                            ElseIf .TextMatrix(row1, 1) < .TextMatrix(row2, 1) Then
                                Cmp = 1
                            Else
                                '年度永远是升序
                                If CCur(.TextMatrix(row1, startCol)) > CCur(.TextMatrix(row2, startCol)) Then
                                    Cmp = 1
                                ElseIf CCur(.TextMatrix(row1, startCol)) < CCur(.TextMatrix(row2, startCol)) Then
                                    Cmp = -1
                                Else
                                    Cmp = 0
                                End If
                            End If
                        End If
                    End If
                Else
                    If bSort = False Then
                        'If .TextMatrix(Row1, curCol) > .TextMatrix(Row1, curCol) Then
                        If .TextMatrix(row1, CurCol) > .TextMatrix(row2, CurCol) Then
                            Cmp = 1
                        ElseIf .TextMatrix(row1, CurCol) < .TextMatrix(row2, CurCol) Then
                            Cmp = -1
                        Else
                            If .TextMatrix(row1, 1) > .TextMatrix(row2, 1) Then
                                Cmp = 1
                            ElseIf .TextMatrix(row1, 1) < .TextMatrix(row2, 1) Then
                                Cmp = -1
                            Else
                                If .TextMatrix(row1, startCol) > .TextMatrix(row2, startCol) Then
                                    Cmp = 1
                                ElseIf .TextMatrix(row1, startCol) < .TextMatrix(row2, startCol) Then
                                    Cmp = -1
                                Else
                                    Cmp = 0
                                End If
                            End If
                        End If
                    ElseIf bSort = True Then
                        If .TextMatrix(row1, CurCol) > .TextMatrix(row2, CurCol) Then
                            Cmp = -1
                        ElseIf .TextMatrix(row1, CurCol) < .TextMatrix(row2, CurCol) Then
                            Cmp = 1
                        Else
                            If .TextMatrix(row1, 1) > .TextMatrix(row2, 1) Then
                                Cmp = -1
                            ElseIf .TextMatrix(row1, 1) < .TextMatrix(row2, 1) Then
                                Cmp = 1
                            Else
                                '年度永远是升序
                                If .TextMatrix(row1, startCol) > .TextMatrix(row2, startCol) Then
                                    Cmp = 1
                                ElseIf .TextMatrix(row1, startCol) < .TextMatrix(row2, startCol) Then
                                    Cmp = -1
                                Else
                                    Cmp = 0
                                End If
                            End If
                        End If
                    End If
                End If
            End With
        End If
      

  2.   

    看得不是很清楚。
    是不是在Compare事件中比较两个(Row1,Row2)指定的单元值,然后据此实置cmp值,然后,compare事件会自动进行排序了。如要对 colsel = 3 的列进行排序,Rows = 5,则sub msfgrid_dblclick()
      for i=1 to 4
        '//此处是你的贴上的比较程序
        msfgrid_compare .row,.row+1,cmp 
      next
    end sub不知是否如此用法?