Opgelost MSFlexGrid in VB6

  • Onderwerp starter Onderwerp starter PhilJ
  • Startdatum Startdatum
Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

PhilJ

Gebruiker
Lid geworden
22 sep 2020
Berichten
18
Hallo,

Ik gebruik een MSFlexGrid met 15 kolommen en 2 rijen.
Graag zou ik zien dat de kolommen gesorteerd worden op basis van de waarden in de 2e rij.
Kan iemand mij hiermee op weg helpen?
 
Kolommen in een andere volgorde zetten in een MSFlexgrid vereist nogal wat programmeerwerk, is het niet veel simpeler je data eerst te sorteren voordat je het grid vult?
 
Helaas is dat geen optie AHulpje.
Mogelijke opties kunnen zijn om de data op te slaan en dan bewerken en weer in te lezen of te importeren in bv een listview en dan sorteren.
 
Hoe heb je het opgelost?
 
Code:
Private Sub RearrangeColumnsByRowNumbers(ByVal FlexGrid As MSFlexGrid, ByVal SortRow As Integer)
    Dim Col As Integer, Temp As String
    Dim ColumnData() As String
    Dim ColumnOrder() As Integer
    Dim i As Integer, j As Integer
    Dim Num1 As Double, Num2 As Double

    ' Create arrays to hold column order and column data
    ReDim ColumnData(FlexGrid.Cols - 1)
    ReDim ColumnOrder(FlexGrid.Cols - 1)

    ' Populate ColumnOrder and get values from SortRow
    For Col = 0 To FlexGrid.Cols - 1
        ColumnOrder(Col) = Col
        ColumnData(Col) = FlexGrid.TextMatrix(SortRow, Col)
    Next Col

    ' Sort columns based on the numeric value in SortRow using Bubble Sort
    For i = LBound(ColumnOrder) To UBound(ColumnOrder) - 1
        For j = i + 1 To UBound(ColumnOrder)
            Num1 = CDbl(ColumnData(ColumnOrder(i)))
            Num2 = CDbl(ColumnData(ColumnOrder(j)))
            ' Reverse sort direction: Swap if Num1 < Num2
            If Num1 < Num2 Then
                ' Swap column order
                Temp = ColumnOrder(i)
                ColumnOrder(i) = ColumnOrder(j)
                ColumnOrder(j) = Temp
            End If
        Next j
    Next i

    ' Rearrange columns in the FlexGrid based on sorted ColumnOrder
    Dim TempGrid As MSFlexGrid
    Set TempGrid = Me.Controls.Add("MSFlexGridLib.MSFlexGrid", "TempGrid")

    ' Initialize TempGrid
    With TempGrid
        .Visible = False
        .Rows = FlexGrid.Rows
        .Cols = FlexGrid.Cols
    End With

    ' Copy data into TempGrid in the new order
    For Col = 0 To FlexGrid.Cols - 1
        For i = 0 To FlexGrid.Rows - 1
            TempGrid.TextMatrix(i, Col) = FlexGrid.TextMatrix(i, ColumnOrder(Col))
        Next i
    Next Col

    ' Copy data back from TempGrid to FlexGrid
    For Col = 0 To TempGrid.Cols - 1
        For i = 0 To TempGrid.Rows - 1
            FlexGrid.TextMatrix(i, Col) = TempGrid.TextMatrix(i, Col)
        Next i
    Next Col

    ' Clean up
    Me.Controls.Remove TempGrid
End Sub
 
Doeltreffende bubble sort, werkt uitstekend op kleine data reeksen 😎
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan