Tri d'un objet grid à partir d'une colone référente

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 701 fois - Téléchargée 86 fois


Contenu du snippet

Cette exemple utilise une fonction d'un autre
exemple permettant de permuter deux lignes
d'un objet Grid : SwapRowGrid()

Source / Exemple :


' ------------------------------------------------------
' Permet d'effectuer un tri dans un objet Grid à partir
' d'une colone de référence
'
Sub SortedGrid(grille As Grid, ByVal Col As Integer)
    Dim ct As Integer, ct2 As Integer, swapRow As Integer
    Dim curVal As Integer, oldVal As Integer
    
    
    If Col < 0 And Col > grille.Cols - 1 Then Exit Sub
    
    For ct = grille.Rows - 1 To grille.FixedRows Step -1
        grille.Row = ct
        grille.Col = Col
        oldVal = Val(grille.Text)
        swapRow = ct
        
        For ct2 = ct To grille.FixedCols Step -1
            grille.Row = ct2
            grille.Col = Col
            
            If oldVal < Val(grille.Text) Then
                Call SwapRowGrid(grille, swapRow, ct2)
                swapRow = ct2
            ElseIf oldVal > Val(grille.Text) Then
                Exit For
            End If
        Next
    Next
End Sub

A voir également

Ajouter un commentaire

Commentaires

tdihedi
Messages postés
3
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
4 mai 2004
-
Merci pour l'auteur de ce code

Si vous essayez ce code vous allez voir qu'il ya quelques bugs:
par exemple le fait que la ligne de titre soit incluse

voici le code modifié:

Private Sub SortedGrid(ByVal Col As Integer)
Dim ct As Integer, ct2 As Integer, swapRow As Integer
Dim curVal, oldVal
Dim Change As Boolean


If Col < 0 And Col > Grid.Cols - 1 Then Exit Sub

Change = True

Do While Change
Change = False
For ct = Grid.Rows - 1 To Grid.FixedRows Step -1
Grid.Row = ct
Grid.Col = Col
oldVal = Grid.Text
swapRow = ct

For ct2 = ct To Grid.FixedRows Step -1
Grid.Row = ct2
Grid.Col = Col

If oldVal < Grid.Text Then
Call SwapRowGrid(swapRow, ct2)
swapRow = ct2
Change = True
ElseIf oldVal > Grid.Text Then
Exit For
End If
Next
Next
Loop

End Sub
tdihedi
Messages postés
3
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
4 mai 2004
-
Mais je crois que la meilleure solution reste quand même

Grid.Sort = 1

c'est beaucoup plus rapide

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.