Sort the columns in an MSFlexGrid control

Started by nandagopal, Aug 28, 2008, 11:19 AM

Previous topic - Next topic

nandagopal

In the control's MouseUp event handler, use its MouseRow function to see if the user clicked in the first row. If this is the first row, call subroutine SortByColumn, passing it the column clicked.


Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift As _
    Integer, x As Single, y As Single)
    ' If this is not row 0, do nothing.
    If MSFlexGrid1.MouseRow <> 0 Then Exit Sub

    ' Sort by the clicked column.
    SortByColumn MSFlexGrid1.MouseCol
End Sub


Subroutine SortByColumn sets the FlexGrid's Col property to the column that it should use for sorting. It calls the control's Sort method telling it whether to sort ascending or descending. It also adds a < or > to the sort column's heading to indicate the sort order.


' Sort by the indicated column.
Private Sub SortByColumn(ByVal sort_column As Integer)
    ' Hide the FlexGrid.
    MSFlexGrid1.Visible = False
    MSFlexGrid1.Refresh

    ' Sort using the clicked column.
    MSFlexGrid1.Col = sort_column
    MSFlexGrid1.ColSel = sort_column
    MSFlexGrid1.Row = 0
    MSFlexGrid1.RowSel = 0

    ' If this is a new sort column, sort ascending.
    ' Otherwise switch which sort order we use.
    If m_SortColumn <> sort_column Then
        m_SortOrder = flexSortGenericAscending
    ElseIf m_SortOrder = flexSortGenericAscending Then
        m_SortOrder = flexSortGenericDescending
    Else
        m_SortOrder = flexSortGenericAscending
    End If
    MSFlexGrid1.Sort = m_SortOrder

    ' Restore the previous sort column's name.
    If m_SortColumn >= 0 Then
        MSFlexGrid1.TextMatrix(0, m_SortColumn) = _
            Mid$(MSFlexGrid1.TextMatrix(0, m_SortColumn), 3)
    End If

    ' Display the new sort column's name.
    m_SortColumn = sort_column
    If m_SortOrder = flexSortGenericAscending Then
        MSFlexGrid1.TextMatrix(0, m_SortColumn) = "> " & _
            MSFlexGrid1.TextMatrix(0, m_SortColumn)
    Else
        MSFlexGrid1.TextMatrix(0, m_SortColumn) = "< " & _
            MSFlexGrid1.TextMatrix(0, m_SortColumn)
    End If

    ' Display the FlexGrid.
    MSFlexGrid1.Visible = True
End Sub