Page 1 sur 1

[R] Trier une listview à plusieurs colonnes

Posté : jeu. 04 juin 2009 13:45
par val25
Bonjour,

J'ai créé une listview à 5 colonnes et j'aimerais pouvoir y ajouter des items et les trier en cliquant sur l'en-tête d'une colonne. Existe-t-il une méthode simple ?
Je précise que les items de chaque ligne sont corrélées et que j'utilise le mode Opt("GUIOnEventMode", 1)
Merci.

Cordialement,

Re: [..] Trier une listview à plusieurs colonnes

Posté : jeu. 04 juin 2009 20:41
par Tlem
Cette question à déjà été posée il y à quelque temps et il semblerait qu'il n'y ait pas de solution 'simple' (a ma connaissance).
Cela dit, un petit tour vers le forum Anglais pourait peut être vous apporter une solution. ;)

Re: [..] Trier une listview à plusieurs colonnes

Posté : ven. 05 juin 2009 10:02
par val25
Dommage !
Je vais donc essayer de creuser la question (peut-être que ça servira à d'autre).

1ère SOLUTION :
J'ai d'abord essayé d'utiliser le style $LVS_SORTASCENDING de la listview.

Exemple de code qui illustre l'utilisation de $LVS_SORTASCENDING :
► Afficher le texte
Résultat :
Lorsqu'on ajoute des items dans la 1ère colonne en même temps que des subitems dans la 2ème, la première colonne est bien triée par ordre alpha au fur et mesure du remplissage.
Problème : Les subitems de la 2ème sont incohérents voire inexistants.
D'autre part, le tri ne peut se faire que lors du remplissage.
Du coup, l'utilisateur ne peut pas cliquer sur l'en-tête d'une colonne pour trier le tableau.


2ème SOLUTION :
Laisser tomber $LVS_SORTASCENDING et utiliser d'autres méthodes comme :
_GUICtrlListView_SortItems
_GUICtrlListView_RegisterSortCallBack

Voici ce que ça pourrait donner à partir de l'exemple précédent :
► Afficher le texte
Résultats :
Lorsque je clique sur les en-tête de colonne, rien ne se passe.

Pourriez-vous éclairer ma lanterne sur ce qui cloche ?
Merci

Re: [..] Trier une listview à plusieurs colonnes

Posté : ven. 05 juin 2009 14:08
par val25
J'ai aussi essayé de m'inspirer des exemples de l'aide, mais ça ne marche pas et j'avoue que je ne comprends pas tout bien à ce script (_WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) ?)
► Afficher le texte

Re: [..] Trier une listview à plusieurs colonnes

Posté : lun. 08 juin 2009 06:27
par orax
Il y a une erreur à la ligne 43, visiblement il manque un argument. Remplacez :
Local $iIndex = _GUICtrlListView_AddItem($hWnd, $aItem[1], _GUICtrlListView_GetItemCount($hWnd) + 9999)
par
Local $iIndex = _GUICtrlListView_AddItem($hWnd, $aItem[1], -1, _GUICtrlListView_GetItemCount($hWnd) + 9999)

Re: [..] Trier une listview à plusieurs colonnes

Posté : lun. 08 juin 2009 08:01
par Tlem
Essayez comme ceci : http://www.autoitscript.com/forum/index ... t&p=675233
Je viens de tester le code, et il fonctionne. ;)

D'après ce que j'ai vu, il ne vous sera pas difficile de l'adapter à votre script.

Re: [..] Trier une listview à plusieurs colonnes

Posté : lun. 08 juin 2009 08:21
par val25
Orax a raison, il manquait effectivement un paramètre à la ligne 43 !
Et du coup le tri fonctionne impécablement !
C'est super.

Merci

Re: [..] Trier une listview à plusieurs colonnes

Posté : lun. 08 juin 2009 09:48
par val25
Voici le code qui fonctionne avec le mode GUIOnEventMode
► Afficher le texte

Re: [R] Trier une listview à plusieurs colonnes

Posté : mar. 18 juin 2013 16:22
par fred39
Bonjour, en reprenant le code de Val25,
Je voudrais trier une listview à 4 colonnes.
► Afficher le texte
Il semble que la fonction _WM_NOTIFY ne soit jamais appelée.
voici un exemple de fichier _liste_stations.csv
► Afficher le texte
Si quelqu'un peut éclairer ma lanterne :D
merci

Re: [R] Trier une listview à plusieurs colonnes

Posté : mar. 18 juin 2013 19:51
par mikell

Code : Tout sélectionner

  [color=#FF0000]$hWndListView = $Lst_Stations[/color]
    If Not IsHWnd($Lst_Stations) Then [color=#FF0000]$hWndListView = GUICtrlGetHandle($Lst_Stations)[/color]
;....
    Switch $hWndFrom
        [color=#FF0000]Case $Lst_Stations [/color]  ;  non !
        Case $hWndListView   ; oui !
            Switch $iCode
:mrgreen:

Re: [R] Trier une listview à plusieurs colonnes

Posté : mer. 19 juin 2013 10:16
par fred39
Bonjour,
Merci Mikell pour ta réponse.
En fait, Val25 a vu qu'il manquait des #include.

Code : Tout sélectionner

#include <WindowsConstants.au3>
le code devient donc:
► Afficher le texte
Et youpi ça marche, on peut trier sur n'importe quelle colonne 8)