[R] Trier une listview à plusieurs colonnes

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
val25
Niveau 2
Niveau 2
Messages : 16
Enregistré le : lun. 16 juin 2008 16:33
Status : Hors ligne

[R] Trier une listview à plusieurs colonnes

#1

Message 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,
Modifié en dernier par val25 le lun. 08 juin 2009 09:54, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#2

Message 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. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
val25
Niveau 2
Niveau 2
Messages : 16
Enregistré le : lun. 16 juin 2008 16:33
Status : Hors ligne

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

#3

Message 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
val25
Niveau 2
Niveau 2
Messages : 16
Enregistré le : lun. 16 juin 2008 16:33
Status : Hors ligne

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

#4

Message 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
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#5

Message 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)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#6

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
val25
Niveau 2
Niveau 2
Messages : 16
Enregistré le : lun. 16 juin 2008 16:33
Status : Hors ligne

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

#7

Message 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
val25
Niveau 2
Niveau 2
Messages : 16
Enregistré le : lun. 16 juin 2008 16:33
Status : Hors ligne

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

#8

Message par val25 »

Voici le code qui fonctionne avec le mode GUIOnEventMode
► Afficher le texte
Avatar du membre
fred39
Niveau 4
Niveau 4
Messages : 64
Enregistré le : lun. 05 mai 2008 10:03
Status : Hors ligne

Re: [R] Trier une listview à plusieurs colonnes

#9

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Trier une listview à plusieurs colonnes

#10

Message 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:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
fred39
Niveau 4
Niveau 4
Messages : 64
Enregistré le : lun. 05 mai 2008 10:03
Status : Hors ligne

Re: [R] Trier une listview à plusieurs colonnes

#11

Message 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)
Répondre