Comment faire un tri par colonne lorsque le Flexgrid est en flexSelectionByRow ?
cs_opala
Messages postés34Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention19 novembre 2007
-
22 nov. 2006 à 18:08
cs_opala
Messages postés34Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention19 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"
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
cs_opala
Messages postés34Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention19 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
cs_opala
Messages postés34Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention19 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