TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
 Specialized Dev Zones Research Center eBook Library .NET Java C++ Web Dev Architecture Database Security Open Source Enterprise Mobile Special Reports 10-Minute Solutions DevXtra Blogs Slideshow

Language: Visual Basic
Oct 24, 2001

WEBINAR:On-Demand

Building the Right Environment to Support AI, Machine Learning and Deep Learning

How to Use the QuickSort Algorithm to Sort MS Flex Grid

Using this code will rewrite all the rows in MS Flex Grid and it supports alphanumeric as well as numeric sorts for specified columns.

Good Luck!

Option Explicit

Public Sub QSort(Grid As MSFlexGrid, ByVal Column As
Integer, ByVal min AsLong, _
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
Daniel Nagdimunov

 Submit a Tip Browse "XML" Tips Browse All Tips
Comment and Contribute

(Maximum characters: 1200). You have 1200 characters left.

Thanks for your registration, follow us on our social networks to keep up-to-date