[WD8] Clic sur entête de colonne dans une table

Le
Eric
Bonjour,

Dans une table mémoire, j'ai un certain nombre de colonnes triables mais
j'aimerais que, lorsqu'on clique sur l'entête d'une de ces colonnes, le
tri se fasse sur la colonne cliquée mais aussi sur une autre.
Exemple : si je clique sur l'entête d'une colonne Nom, je veux trier ma
table sur la colonne Nom et la colonne Prénom.
Pour cela, il faudrait intercepter le clic sur la colonne (et, si
possible, empêcher le tri sur le nom seul) et c'est ce que je ne sais
pas faire.

Merci d'avance.

--
Cordialement
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Romain PETIT
Le #13416251
Eric a exposé le 15/04/2004 :

Pour cela, il faudrait intercepter le clic sur la colonne (et, si
possible, empêcher le tri sur le nom seul) et c'est ce que je ne sais
pas faire.



Voici mes procédures (en WD7.5) :

A+

***** Déclarations globales de la fenêtre
//Evenement pour détecter le clic sur en-tête de colonne
gf_eEvClicTable est un entier
//Pour le tri multiple
g_bTriMulti est un booléen

***** Initialisation de la fenêtre
sNomTable est une chaine = "MaTable"
gf_eEvClicTable=Evénement("pl_ClicEnTeteTable", sNomTable, 1529)

***** Fermeture de la fenêtre
SI gf_eEvClicTable<>0 ALORS FinEvénement(gf_eEvClicTable)

***** Procédure locale pl_ClicEnTeteTable
PROCEDURE pl_ClicEnTeteTable(sMess, wParam, lParam)

sNomTable est une chaîne = "MaTable"
sNomColonne est une chaîne = "MaColonneATrier"
eRes est un entier = CurseurPos(cpClient)
eX est un entier
eX = PoidsFaible(eRes)-{sNomTable,indChamp}..X

sNomColCliquée est une chaîne
sNomColCliquée =TableEnumèreColonne(sNomTable,wParam)
// La colonne correspond-elle à celle à trier ?
SI sNomColCliquée=sNomColonne ALORS
//On ne prend pas en compte le clic si la loupe est présente
//(à environ 10 pixels)
SI eX < {sNomTable+"."+sNomColonne,indChamp}..Largeur-10 ALORS
si gf_bTriMulti alors
TableTrie(sNomTable,"+COL1","+COL2")
sinon
TableTrie(sNomTable,"-COL1","-COL2")
FIN
gf_bTriMulti = PAS gf_bTriMulti
// Le renvoyer 0 permet d'annuler
// le tri sur la colonne seule
RENVOYER 0
FIN
FIN

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Eric
Le #13416211
Le 15 avril 2004 à 21:59, Romain PETIT nous disait :

Pour cela, il faudrait intercepter le clic sur la colonne (et, si
possible, empêcher le tri sur le nom seul) et c'est ce que je ne sais
pas faire.



Voici mes procédures (en WD7.5) :



[couic le bon code]

Merci Romain, ce n'était pas tout à fait ce que je voulais mais ça m'a
donné un très bon point de départ et j'ai réussi à l'adapter à mes
besoins.
Maintenant, je peux cliquer sur n'importe quelle entête de colonne et le
tri se fait sur cette colonne et sur une autre que j'ai déterminée à
l'avance.
Si tu es intéressé par mon code (ou si quelqu'un d'autre l'est), je peux
le poster ici.

--
Cordialement
Marcel.berman
Le #13416151
Salut !


On 16-Apr-2004, Eric
Merci Romain, ce n'était pas tout à fait ce que je voulais mais ça m'a
donné un très bon point de départ et j'ai réussi à l'adapter à mes
besoins.
Maintenant, je peux cliquer sur n'importe quelle entête de colonne et le
tri se fait sur cette colonne et sur une autre que j'ai déterminée à
l'avance.
Si tu es intéressé par mon code (ou si quelqu'un d'autre l'est), je peux
le poster ici.

--
Cordialement



Ben ... moi cela m'intéresse !

Merci d'avance !
--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Gilles Balp
Le #13072171
c'est clair, on est intéressé.... merci d'avance

Gilles Balp

"Eric" news:egvuvdio1e7s$
Le 15 avril 2004 à 21:59, Romain PETIT nous disait :

>> Pour cela, il faudrait intercepter le clic sur la colonne (et, si
>> possible, empêcher le tri sur le nom seul) et c'est ce que je ne sais
>> pas faire.
>
> Voici mes procédures (en WD7.5) :

[couic le bon code]

Merci Romain, ce n'était pas tout à fait ce que je voulais mais ça m'a
donné un très bon point de départ et j'ai réussi à l'adapter à mes
besoins.
Maintenant, je peux cliquer sur n'importe quelle entête de colonne et le
tri se fait sur cette colonne et sur une autre que j'ai déterminée à
l'avance.
Si tu es intéressé par mon code (ou si quelqu'un d'autre l'est), je peux
le poster ici.

--
Cordialement


Eric
Le #13071941
Á la demande (presque :-) ) générale, voici mon code, largement inspiré
de celui de Romain Petit.

***Déclarations globales de la fenêtre
GLOBAL
//Evenement pour détecter le clic sur en-tête de colonne
gfiEvClicTable est un entier
//Pour le tri multiple
gfsNomTable est une chaîne = "Table"
gfiNbColonnes est un entier
gfiColTriee est un entier
gfbSensTri est un booléen = Vrai
gfsColNom est un tableau dynamique
gfbColVisible est un tableau dynamique

***Init de la fenêtre
Bcl est un entier

gfiEvClicTable=Evénement("pl_ClicEnTeteTable", gfsNomTable, 1529)

gfiNbColonnes=TableOccurrence(gfsNomTable,toColonne)

gfsColNom=allouer un tableau de gfiNbColonnes chaînes
gfbColVisible=allouer un tableau de gfiNbColonnes booléens

POUR Bcl=1 A gfiNbColonnes
gfsColNom[Bcl]=TableEnumèreColonne(gfsNomTable,Bcl)
SI {gfsColNom[Bcl]}..Visible=Vrai ALORS gfbColVisible[Bcl]=Vrai SINON gfbColVisible[Bcl]úux
FIN

***Fermeture de la fenêtre
SI gfiEvClicTable<>0 ALORS FinEvénement(gfiEvClicTable)

***Procédure
PROCEDURE pl_ClicEnTeteTable(sMess, wParam, lParam)

eRes est un entier = CurseurPos(cpClient)
eX est un entier
sNomColCliquée est une chaîne
Bcl est un entier
PosMax est un entier

eX = PoidsFaible(eRes)-{gfsNomTable,indChamp}..X

// PosMax contiendra la somme des largeurs des colonnes
// jusqu'à la colonne cliquée incluse. Ceci servira au calcul
// de la position de la loupe
sNomColCliquée =TableEnumèreColonne(gfsNomTable,wParam)
POUR Bcl=1 A gfiNbColonnes
SI gfbColVisible[Bcl] ALORS PosMax=PosMax+{gfsColNom[Bcl]}..Largeur
SI sNomColCliquée=gfsColNom[Bcl] ALORS SORTIR
FIN

//On ne prend pas en compte le clic si la loupe est présente
//(à environ 10 pixels)
SI eX < PosMax-10 ALORS
SI Bcl<>gfiColTriee ALORS
gfiColTriee¼l
gfbSensTri=Vrai
FIN
SI gfbSensTri ALORS
TableTrie(gfsNomTable,sNomColCliquée,"COL2")
SINON
TableTrie(gfsNomTable,"-"+sNomColCliquée,"COL2")
FIN
gfbSensTri = PAS gfbSensTri
// Le renvoyer 0 permet d'annuler
// le tri sur la colonne seule
RENVOYER 0
FIN

Voilà. On peut encore perfectionner mais, tel quel, ça fait ce que je
cherchais. Le seul (tout) petit hic, c'est que le triangle indiquant le
sens du tri dans les entêtes ne bouge pas.

--
Cordialement
elecoest
Le #13071921
> [CUT]



Voilà. On peut encore perfectionner mais, tel quel, ça fait ce que je
cherchais. Le seul (tout) petit hic, c'est que le triangle indiquant le
sens du tri dans les entêtes ne bouge pas.



Chez moi, si la colonne est uniquement triable, le triangle change de coté
sauf si la valeur est constante pour toute les lignes. Je suis en 206.

--
Emmanuel


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.618 / Virus Database: 397 - Release Date: 09/03/2004
Eric
Le #13071911
Le 16 avril 2004 à 18:17, elecoest nous disait :

Voilà. On peut encore perfectionner mais, tel quel, ça fait ce que je
cherchais. Le seul (tout) petit hic, c'est que le triangle indiquant le
sens du tri dans les entêtes ne bouge pas.



Chez moi, si la colonne est uniquement triable, le triangle change de coté
sauf si la valeur est constante pour toute les lignes. Je suis en 206.



Ah ? Je suis en WD8 314i et j'ai toujours les 2 petits triangles
tête-bêche affichés, avec ou sans loupe. Le fait de cliquer sur l'entête
ne les affecte pas du tout.

--
Cordialement
Publicité
Poster une réponse
Anonyme