Message de rapport:
 

Re: TableColonnesTriées

Sujet: Re: TableColonnesTriées
par Asthroth sur 15/12/2008 11:59:29

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
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