borderAndreaVB free resources for Visual Basic developersborder
AndreaVB Visual Basic and VB.NET source code resources - Copyright © 1999-2017 Andrea Tincani
:: How to quick sort data in MS Flex Grid

Author  

Daniel Nagdimunov

Language  

VB4, VB5, VB6

Operating Systems  

Windows 95, 98 and NT
Module

Option Explicit

Public Sub QSort(Grid As MSFlexGrid, ByVal Column As Integer, ByVal min As Long, _
    ByVal max As Long, ByVal Ascending As Boolean, ByVal NumComp As Boolean)

    Dim tmp()
' when swap rows keep copy here
    ReDim tmp(Grid.Cols)
    Dim med_value, hi As Long, lo As Long, i As Integer

    If min >= max Then Exit Sub

    med_value = Grid.TextMatrix(min, Column)
    SaveRow Grid, min, tmp

    lo = min
    hi = max

    Do
        Do While Compare(Grid.TextMatrix(hi, Column), med_value, NumComp, Ascending) >= 0
            hi = hi - 1
            If hi <= lo Then Exit Do
        Loop
        If hi <= lo Then
            RestoreRow Grid, lo, tmp
            Exit Do
        End If
        For i = 0 To Grid.Cols - 1
            Grid.TextMatrix(lo, i) = Grid.TextMatrix(hi, i)
        Next i
        lo = lo + 1
        Do While Compare(Grid.TextMatrix(lo, Column), med_value, NumComp, Ascending) < 0
            lo = lo + 1
            If lo >= hi Then Exit Do
        Loop
        If lo >= hi Then
            lo = hi
            RestoreRow Grid, hi, tmp
            Exit Do
        End If
        For i = 0 To Grid.Cols - 1
            Grid.TextMatrix(hi, i) = Grid.TextMatrix(lo, i)
        Next i
    Loop

    QSort Grid, Column, min, lo - 1, Ascending, NumComp
    QSort Grid, Column, lo + 1, max, Ascending, NumComp
End Sub


Private Function Compare(ByVal X, ByVal Y, ByVal NumComp As Boolean, _
    ByVal Ascending As Boolean) As Integer

    Dim b As Integer

    If NumComp Then
        X = CDbl(X)
        Y = CDbl(Y)
    End If
    If X > Y Then b = 1
    If X < Y Then b = -1
    If X = Y Then b = 0
    If Not Ascending Then b = -b
    Compare = b
End Function

Private Sub RestoreRow(Grid As MSFlexGrid, ByVal RowNum As Long, tmpArr())

    Dim i As Long

    For i = 0 To Grid.Cols - 1
        Grid.TextMatrix(RowNum, i) = tmpArr(i)
    Next i
End Sub

Private Sub SaveRow(Grid As MSFlexGrid, ByVal RowNum As Long, tmpArr())

    Dim i As Long

    For i = 0 To Grid.Cols - 1
        tmpArr(i) = Grid.TextMatrix(RowNum, i)
    Next i
End Sub

'Call qsort function to sort
'msflexgrid is a reference to gridcontrol you want to sort
'column is by which column to sort by.
'min and max are the rows to sort.
'ascending is a bolean for ascending or descending sort
'NumComp is a boolean whether it's a numeric search or alphanumeric
'
'Have Fun Dan

:: Navigation

Home

Database Management

Previous Tip

Next Tip

:: Search this site
Google
:: Related Topics
icon 14-01-2008 Re: sort numeric array by stickleprojects
icon 05-07-2006 GRID - Free, spreadsheet style grid by zarkorgon
icon 05-07-2006 GRID - Free, spreadsheet style grid by zarkorgon
icon 18-10-2005 Re: Recordset Cursor? by yronium
icon 14-08-2005 Re: Task Manager process info by misterxed
:: Sponsored Links



borderAndreaVB free resources for Visual Basic developersborder
borderAndreaVB Visual Basic and VB.NET source code resources - Copyright © 1999-2017 Andrea Tincaniborder