PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Tri multi colonne
Tri multi colonne
Débuté par Bruno, 10 mar. 2017 14:20 - 5 réponses
Posté le 10 mars 2017 - 14:20
Bonjour à tous,

J'ai une table mémoire (basée sur une requête) avec plusieurs colonnes.
les colonnes ont
COL_Num
COL_Date
COL_CodeClient
COL_NomClient
COL_MontantHT

Sur le clic d'une des colonnes (provoquant son tri), je voudrais qu'il y avait un double tri
- Sur la colonne cliquée de manière normale
- Sur la colonne col_date de manière décroissante (du plus récent vers le plus ancien)
Par exemple
clic sur COL_CODECLIENT doit provoqué le tri sur le code client et pour chaque client les dates dans l'ordre décroissant

A l'initialisation de la table j'ai placé le code suivant :
Evenemen("PRV_CLIC_ENTETE_COLONNE","Tbl_listeTransports",1529)

Le clic sur une des colonnes de tables accède bien à la procédure PRV_CLIC_ENTETE que voici

lc_colonneEncours est chaîne
le_NumcolonneEncours est entier = _EVE.wParam
SI le_NumcolonneEncours>0 ALORS
lc_colonneEncours = TableEnumèreColonne(Tbl_ListeTransports,le_NumcolonneEncours)
SI lc_colonneEncours<>"COL_DATE" ALORS
TableTrie(lc_colonneEncours+TAB+"-COL_DATE")
SI EnModeTest() Trace("tri colonne en cours ", lc_colonneEncours,TableColonnesTriées(Tbl_ListeTransports))
FIN
FIN


Je précise que la ligne SiEnmodetest() renvoie bien la liste des colonnes triées avec "-COL_DATE.
Or la table n'est triée que sur le premier critère.

Aurais je raté quelque chose
Merci d'avance pour vos réponses

Bruno
Membre enregistré
2 572 messages
Popularité : +222 (260 votes)
Posté le 13 mars 2017 - 05:27
Bonjour,

Peux tu afficher une image du résultat de ta table après le tri et ce que tu devrais avoir ?
As-tu essayé de trier manuellement pour voir si le tri fonctionne correctement ?

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Posté le 15 mars 2017 - 15:49
Bonjour
D'abord merci de m'avoir répondu
Le tri manuel fonctionne parfaitement (mais sur une colonne), en cliquant sur la colonne COL_DATE en maintenant enfoncée la touche CTRL le double tri fonctionne aussi.
Ce que je voudrais éviter c'est cette deuxième manip.
Je n'arrive pas à uploader d'image mais voila ce qu'on doit obtenir en cliquant sur la colonne Col_CodeClient
Col_num | Col_Date | Col_codeClient
1 | 15/02/2017 | 0001
10 | 01/02/2017 | 0001
9 | 31/01/2017 | 0001
12 | 14/02/2017 | 0002
5 | 16/01/2017 | 0002
25 | 10/01/2017 | 0003

Je précise que la requete source fait le tri comme il est prévu mais c'est au 1er clic sur un autre entête que l'on perd le tri.
Merci encore pour les réponses à venir
Bruno
Posté le 15 mars 2017 - 16:08
Bonjour Bruno,

si j'ai bien compris, tu intercepte l'évènement normal de tri pour faire
ton tri sur 2 colonnes à la place...

Si j'ai juste, alors ton problème pourrait bien être que APRES ton code,
le VRAI tri est effectué et donc remplace le tien...

Et dans ce cas, ca veut dire qu'il faut que tu indique dans ton code que
l'évènement normal ne devrait pas avoir lieu, avec un resultat FAUX, si
je me souviens bien

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


Le 3/15/2017 à 9:49 AM, Bruno CATANIA a écrit :
Bonjour D'abord merci de m'avoir répondu
Le tri manuel fonctionne parfaitement (mais sur une colonne), en
cliquant sur la colonne COL_DATE en maintenant enfoncée la touche CTRL
le double tri fonctionne aussi.
Ce que je voudrais éviter c'est cette deuxième manip.
Je n'arrive pas à uploader d'image mais voila ce qu'on doit obtenir en
cliquant sur la colonne Col_CodeClient
Col_num | Col_Date | Col_codeClient
1 | 15/02/2017 | 0001
10 | 01/02/2017 | 0001
9 | 31/01/2017 | 0001
12 | 14/02/2017 | 0002
5 | 16/01/2017 | 0002
25 | 10/01/2017 | 0003

Je précise que la requete source fait le tri comme il est prévu mais
c'est au 1er clic sur un autre entête que l'on perd le tri.
Merci encore pour les réponses à venir
Bruno
Posté le 16 mars 2017 - 15:40
Même diagnostic que Fabrice.
Le système exécute ton code, puis exécute ce qu'il avait prévu de faire (donc tri simple).
Ce qui est un pau bizarre, c'est que le 2ème tri ne devrait rien changer, puisque la table est déjà correctement triée. (mais les algo de tri peuvent parfois être surprenants..)

Juste pour valider que le diagnostic est bon, fais un bouton avec :
TableTrie ( maTable, "COL1;-Col_Date")
Info( "step1")
TableTrie ( matable, "COL1")
[code:wl]
SI le 2ème tri change l'ordre, ALORS le diagnostic est bon.

Ensuite, effectivement, la solution pour empêcher le moteur de FAIRE le traitement correspondant au clic, c'est de mettre
[code:wl]
RENVOYER Faux

à la fin du code.
Posté le 22 mars 2017 - 14:12
La soluce de Fabrice et donc de Joel était la bonne.
Merci pour le coup de pouce.