Comment faire un tri par colonne lorsque le Flexgrid est en flexSelectionByRow ?

cs_opala Messages postés 34 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 19 novembre 2007 - 22 nov. 2006 à 18:08
cs_opala Messages postés 34 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 19 novembre 2007 - 23 nov. 2006 à 11:03
Bonjour,

J'ai un Flexgrid. J'ai le parametré avec SelectionMode = flexSelectionByRow
Notamment parce que l'utilisateur pourra effacer une ligne complete avec un clic droit (comme ca, la notion de "1 ligne = 1 enregistrement" est bien mise en valeur)

Cépendant, je souhaiterais mettre un tri sur les colonnes lors d'un click. J'ai implémenté le code, mais le tri lors du clic sur une colonne ne fonctionne que si je parametre la Flexgrid en "SelectionMode flexSelectionByColumn" ou "SelectionMode flexSelectionByFree"

Comment faire?

Merci pour votre aide,
Olivier

4 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
22 nov. 2006 à 23:50
Personnellement, j'utilise cette méthode.
Un click sur l'entête d'une colonne, la grille se trie en mode croissant sur cette colonne; un autre click et elle se trie en mode décroissant. Les flags sont à revoir si tu veux trier selon différents types de données (texte, nombres, dates...). Ici, je trie des chiffres.

J'ai fait le test en mode sélection par ligne et ça fonctionne bien.

Private Sub Grid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    Static Flag As Integer
   
    If Button = 1 And y <= 250 Then '250 = hauteur d'une ligne, donc l'entête, ici
        If Flag <> 1 Then
            Flag = 1
        Else
            Flag = 2
        End If
       
        Grid1.Sort = Flag
       
    End If
End Sub

MPi
0
cs_opala Messages postés 34 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 19 novembre 2007
23 nov. 2006 à 10:29
Salut MPi

Désolé, mais en mode flexSelectionByRow, ta méthode ne marche pas.
En effet, Grid1.Sort = Flag va s'appliquer automatiquement à la colonne 0! Donc meme si on Grid1_MouseUp sur la colonne 1, 4, 5 etc... on aura un tri par rapport à la colonne 0 car on est en flexSelectionByRow

(ta méthode marche si on est en flexSelectionByColumn of course)

Du coup je vais me mettre en flexSelectionByRow, et je vais gérer moi meme la surbrillance de la ligne complete....suis en train de gérer la surbrillance moi meme (.CellBackColor .BackColorSel & .CellForeColor .ForeColorSel)

Je reviens des que j'ai fini la surbrillance de plusieurs ligne en meme temps

(je vais m'inspirer du code suivant:
http://www.vbfrance.com/codes/MISE-SURBRILLANCE-SELECTION-DANS-MSHFLEXGRID-AVEC-CELLULES-FUSIONNEES_25211.aspx)

A+
0
cs_opala Messages postés 34 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 19 novembre 2007
23 nov. 2006 à 10:30
--EDIT--

"Du coup je vais me mettre en flexSelectionByRow"

=> je voulais dire:
Du coup je vais me mettre en flexSelectionFree" ;)
0
cs_opala Messages postés 34 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 19 novembre 2007
23 nov. 2006 à 11:03
Private Sub MSFlexGrid_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim r As Single
Dim c As Single
With MSFlexGrid
'clic droit
If Button = 2 Then
'on trouve les limites de la multi selection
If .Row < .RowSel Then
gFlexGridRowSelDebut = .Row
gFlexGridRowSelFin = .RowSel
Else
gFlexGridRowSelDebut = .RowSel
gFlexGridRowSelFin = .RowSel
End If
'on selectionne les lignes
For r = gFlexGridRowSelDebut To gFlexGridRowSelFin
For c = 1 To .Cols - 1
.Col = c
.Row = r
.CellBackColor = .BackColorSel
.CellForeColor = .ForeColorSel
Next c
Next r
'on affiche le menu du formulaire Menu
If (gFlexGridRowSelDebut <> 0 Or gFlexGridRowSelFin <> 0) Then
Me.PopupMenu Menu.MnuPrincipal, y, x
End If
'on déselectionne les lignes
For r = gFlexGridRowSelDebut To gFlexGridRowSelFin
For c = 1 To .Cols - 1
.Col = c
.Row = r
.CellBackColor = .BackColor
.CellForeColor = .ForeColor
Next c
Next r
End If
End With
End Sub
0
Rejoignez-nous