PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV (earlier versions) → Tri multi colonne
Tri multi colonne
Started by Bruno, Mar., 10 2017 2:20 PM - 5 replies
Posted on March, 10 2017 - 2:20 PM
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
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on March, 13 2017 - 5:27 AM
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
Posted on March, 15 2017 - 3:49 PM
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
Posted on March, 15 2017 - 4:08 PM
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
Posted on March, 16 2017 - 3:40 PM
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.
Posted on March, 22 2017 - 2:12 PM
La soluce de Fabrice et donc de Joel était la bonne.
Merci pour le coup de pouce.