Avoir un compteur dans une collection
-
Avoir un compteur dans une collection
Il y a des moments où on a besoin de numéroter les éléments d’une collection alors même que cette collection ne propose pas d’identifiant. Par exemple si vous voulez colorer en alternance chacun des éléments dans une galerie.
L’astuce consiste à ajouter un compteur qui va être obtenu en faisant une boucle sur une séquence. Cette séquence (suite de valeurs qui sera dans notre cas 1, 2, 3, … à n éléments) sera parcouru pour créer de nouveaux enregistrements contenant à la fois l’enregistrement de la collection et le compteur.
Voici la formule à utiliser sur la propriété
items
de la gallerieWith(n // Pour simplifier le réemploi de la formule, on mémorise juste ici la collection dans la variable 'theCollection'n {theCollection:CustomGallerySample};n ForAll( n //on parcour non pas la collection mais une séquence dont le nombre d'éléments est égal au nombre d'éléments dans notre collectionn Sequence(n CountRows( theCollection )n );n //on restitue un tableau d'enregistrements n {n cpt: Value; // le compteur de 1 à n (n étant le nombre d'éléments dans la collection)n item: Last( FirstN( theCollection ; Value ) ) // item contiendra le nième enregistrement de la collectionn }n )n)
With
: permet de définir des variables réutilisables uniquement au sein de la formule (évite de modifier le nom de la variable partout dans le code, ou permet de faire un calcul dont le résultat pourra être réutiliser dans la même formule sans être recalculé à chaques fois)ForAll
: parcours une collection pour traiter chacun de ses élémentsSequence
: fourni une liste de nombreCountRows
: compte le nombre d’éléments dans une collectionLast
: récupère le dernier enregistrement d’une collectionFirstN
: récupère les N premiers enregistrements d’une collectionPour afficher une donnée de notre collection, on utilise tout simplement
ThisItem.item.SampleHeading
(SampleHeading étant un champ de notre enregistrement)Ensuite pour colorer alternativement chacun des éléments de la gallerie, j’utilise la fonction
Mod
avec 2. Par exemple la fonction suivante sur la propriétéTemplateFill
:If(n Mod(ThisItem.cpt;2)=0 ; //si le reste de la division par 2 donne 0 (nombres pairs)n RGBA(200; 200; 200; 1) ; //gris foncén RGBA(240; 240; 240; 1) //gris clairn)
En espérant que ca serve à d’autres.
PostID=GwtPOEVrD3YiCGN
Connectez-vous pour répondre.