比如下面是一个MSHFlexGrid数据的话,我按列自动进行排序
排序前的数据如下:
---------
7 3 2 1 5
---------
1 2 3 4 5
----------
排序后的数据如下:
1 2 3 5 7
---------
4 3 2 5 1
----------
好像是用Compare和sort两种解决.本人实在不懂怎么完成,
希望哪位高手能帮帮忙,最好能帮忙写出代码,谢谢!

解决方案 »

  1.   

    [code=VBOption ExplicitPrivate Const STR_SORT_ASC = "△"
    Private Const STR_SORT_DESC = "▽"Private Sub Form_Load()
        Dim i As Long
        
        '添加一些试验数据
        With MSHFlexGrid1
            .Rows = 51
            .Cols = 5
            For i = 1 To 50
                .TextMatrix(i, 0) = i
                .TextMatrix(i, 1) = i + 10
                .TextMatrix(i, 2) = i - 10
                .TextMatrix(i, 3) = i + 20
                .TextMatrix(i, 4) = i - 20
            Next
        End With
    End Sub'排序函数
    Public Sub Sort(sgrd As MSHFlexGrid, y As Single)
        With sgrd
            If y >= .RowPos(0) And y < .RowPos(1) Then
                If .Tag <> "" Then
                    If .Tag <> .Col Then
                        .TextMatrix(0, .Tag) = Left(.TextMatrix(0, .Tag), Len(.TextMatrix(0, .Tag)) - 1)
                    End If
                End If
                
                If Right(.TextMatrix(0, .Col), 1) = STR_SORT_ASC Then
                    .Sort = flexSortGenericAscending
                    .TextMatrix(0, .Col) = Replace(.TextMatrix(0, .Col), STR_SORT_ASC, STR_SORT_DESC)
                ElseIf Right(.TextMatrix(0, .Col), 1) = STR_SORT_DESC Then
                    .Sort = flexSortGenericDescending
                    .TextMatrix(0, .Col) = Replace(.TextMatrix(0, .Col), STR_SORT_DESC, STR_SORT_ASC)
                Else
                    .Sort = flexSortGenericDescending
                    .TextMatrix(0, .Col) = .TextMatrix(0, .Col) & STR_SORT_ASC
                End If
                .Tag = .Col
            End If
        End With
    End SubPrivate Sub MSHFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
        Sort MSHFlexGrid1, y
    End Sub
    ][/code]
      

  2.   

    SYSSZ,很感谢你的回复.不过,很抱歉,我要的不是行排序,而是列排序!
    不过,还是要谢谢你.你如果知道列排序的话,希望请你再帮我一次,谢谢!
      

  3.   

    按列排序的话,先定位行,再对textarray进行排序
    或者先定位行,取出该行的所有数据到数组,在数组内完成排序,再填充排序好的数据
      

  4.   

    XXYJ6450,谢谢你的回复.你的说的我也想过了.
    我只是想要一些实例代码参考.谢谢哪位,真有本事
    高手帮帮忙,谢谢!
      

  5.   

    使用的选择排序,如果需要稳定排序,就换成冒泡好了
    Private Sub Command1_Click()
        '根据第1行内容进行选择排序
        '通过ColPosition属性调整列顺序达到排序效果
        Dim i As Long, j As Long, k As Long
        With MSHFlexGrid1
            For i = 1 To .Cols - 2
                k = i
                For j = i + 1 To .Cols - 1
                    If CLng(.TextMatrix(1, j)) < CLng(.TextMatrix(1, k)) Then
                        k = j
                    End If
                Next
                If k <> i Then
                    .ColPosition(k) = i
                    .ColPosition(i + 1) = k
                End If
            Next
        End With
    End SubPrivate Sub Form_Load()
    '初始化表格,生成示例数据
        With MSHFlexGrid1
            .FixedCols = 1
            .FixedRows = 1
            .Rows = 2
            .Cols = 6
            .AddItem vbTab & "7" & vbTab & "3" & vbTab & "2" & vbTab & "1" & vbTab & "5"
            .AddItem vbTab & "1" & vbTab & "2" & vbTab & "3" & vbTab & "4" & vbTab & "5"
            .RemoveItem 1
        End With
    End Sub