TableColonnesTriées
ChefDeProjet WDF
Inscrit:
29/05/2007 17:03
De Sassenage
Post(s): 180
Bonjour,

j'effectue une trie multiple sur une table en maintenant la bouton shift enfoncé et cliquant sur mes entete de colonnes, mais la fonction TableColonnesTriées ne me renvoie que le nom de la derniere colonne cliqué, alors qu'elle devrait me renvoyer le nom des entete intervenant dans le trie séparés par TAB, quelqu'un a-t-il une solution?

Merci.

Contribution le : 12/12/2008 17:15
Créer un fichier PDF de la contribution Imprimer


Re: TableColonnesTriées
ChefDeProjet WDF
Inscrit:
29/05/2007 17:03
De Sassenage
Post(s): 180
D'autres personne ayant installé la pré-version de la 14 ont le même comportement, donc il ne semble pas y avoir de solution "native" à ce problème.

Contribution le : 15/12/2008 09:32
Créer un fichier PDF de la contribution Imprimer


Re: TableColonnesTriées
ChefDeProjet WDF
Inscrit:
29/05/2007 17:03
De Sassenage
Post(s): 180
Bon, comme on est jamais mieux servie que par soit meme, j'ai fait un petit bout de code pour gerer ce truc, voici donc:

Déclaration globale de votre fenetre:
sListeColonneTrie est une chaîne //Liste des colonne de trie de la table des entetes

Evénement("Ma_Procedure",Matable..Nom, 1529)


Ma_procedure
PROCEDURE Ma_Procedure()
iIndice est un entier = 1
sChaine est une chaîne
sRecuperationLibelle est une chaîne

//récuperation de l'indice de la colonne
iNumColonne est un entier système = _EVE.wParam

//on remet les libellés des colonnes comme à l'origine, ils seront remis a jour a la fin de la procedure
sChaine = ExtraitChaîne(sListeColonneTrie,iIndice)
TANTQUE sChaine<>EOT _ET_ sListeColonneTrie<>""
     RecuperationLibelle = ExtraitChaîne({Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé,2,"]")
     {Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé = 	sRecuperationLibelle //ExtraitChaîne({droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé,2,"[")
	
	iIndice++
	sChaine = ExtraitChaîne(sListeColonneTrie,iIndice)
FIN

//récupération du nom de la colonne
sNomColonne est une chaîne = "TABLE_HEADER."+TableEnumèreColonne(TABLE_HEADER,iNumColonne)

//test si on ajoute un non une nouvelle colonne de trie
SI PAS ToucheEnfoncée(teShift) _ET_ (... 
	(PAS ChaîneOccurrence(sListeColonneTrie,TAB) _ET_ sNomColonne <> sListeColonneTrie) _OU_ ChaîneOccurrence(sListeColonneTrie,TAB)) ALORS
	 sListeColonneTrie = "" //on vide la liste des colonne si on a pas appuyé sur shift //trace("shift enfoncée")
FIN

//ajout du nom de la colonne dans la liste de trie
sListeColonneTrie = Remplace(sListeColonneTrie,"_","è") //a cause de position qui fait n'importe quoi sur les séparateur, pour lui "_" est un caractère de ponctuation!!!!

sNomColonne = Remplace(sNomColonne,"_","è")

iPositionChaine est un entier = Position(sListeColonneTrie,sNomColonne,0, DepuisDébut+MotComplet)

//si on ne l'as pas trouvé, on l'ajoute, sinon on annule le sens de trie
SI iPositionChaine = 0 ALORS
	SI sListeColonneTrie <>"" ALORS
		sListeColonneTrie+=TAB
	FIN
	sListeColonneTrie+="+"+sNomColonne
SINON
	
	//on inverse le signe de trie
	sListeColonneTrie = sListeColonneTrie[[A (iPositionChaine-2)]]+Gp_Viif(sListeColonneTrie[[(iPositionChaine-1) A (iPositionChaine-1)]] = "+", "-", "+")+...
		sListeColonneTrie[[(iPositionChaine) A]]
	
FIN
//on remet la chaine correctement
sListeColonneTrie = Remplace(sListeColonneTrie,"è","_") //a cause de position qui fait n'importe quoi sur les séparateur, pour lui "_" est un caractère de ponctuation!!!!

//mise a jour des libellés des colonnes
iIndice = 1
sChaine = ExtraitChaîne(sListeColonneTrie,iIndice)
TANTQUE sChaine<>EOT
	SI PAS ChaîneOccurrence({Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé,"]") ALORS
		sRecuperationLibelle = {Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé
	SINON
		sRecuperationLibelle = ExtraitChaîne({Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé,2,"]")
	FIN
	
	{Droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé = ...
	"["+Gauche(sChaine,1)+iIndice+"]"+ sRecuperationLibelle //ExtraitChaîne({droite(sChaine,Taille(sChaine)-1),indChamp}[0]..Libellé,2,"[")
	
	iIndice++
	sChaine = ExtraitChaîne(sListeColonneTrie,iIndice)
FIN

TableTrie(sListeColonneTrie)

//on annule le trie automatique vu que c'est nous qui le faisons
RENVOYER Faux


Pour info, il faut remplacer le bout de code GP_VIIF par la syntaxe conditionnelle avec le ? (voir l'aide de windev).
Normalement, ca doit marcher, si vous y trouvé des bugs, faites un retour ici, merci d'avance

PS: Correctif sur la gestion de la touche Shift

Contribution le : 15/12/2008 11:59

Edité par Asthroth sur 15/12/2008 12:31:05
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2