Galeries imbriquées : accéder à l'élément parent
-
Galeries imbriquées : accéder à l'élément parent
Lorsque l’on imbrique 2 galeries dans Power Apps, il est souvent nécessaire d’accéder à l’élément de la galerie parente depuis la galerie enfant.
Par exemple, dans une galerie verticale qui liste des projets on place une galerie horizontale qui liste des dates pour effectuer une saisie des temps :
Depuis cette galerie enfant, il faut pouvoir savoir sur quel projet on se trouve dans la galerie parente afin d’afficher la saisie des temps pour la date concernée dans la galerie enfant.
Nativement ce n’est pas possible : on ne peut pas écrire quelque chose du type
Parent.Parent.ThisItem
.Il existe 2 astuces pour palier à ce problème…
Ajouter un contrôle dans la galerie parente
Cette technique consiste donc à placer dans la galerie parente un libellé qui va contenir la donnée souhaitée (par exemple ici un libellé masqué nommé lblProjetID qui va contenir l’identifiant du projet en cours).
La valeur de ce libellé peut alors être utilisé dans la galerie enfant (sur le text input en blanc sur le schéma) de la manière suivante :
LookUp(SAISIES; ProjetID = lblProjetID.Text && Date = ThisItem.Date).Temps
Ajouter une colonne dans la galerie enfant
L’idée ici est d’ajouter une colonne à la source de données qui alimente la galerie enfant avec la donné nécessaire. Ainsi, si la galerie enfant est alimentée avec un
Filter(DATE; Semaine = WeekNum(Today()))
, l’idée est de lui ajouter l’identifiant du projet pour qu’il puisse être utilisé dans la galerie enfant :AddColumns(Filter(DATE; Semaine = WeekNum(Today())); _ProjetID = ThisItem.ID)
(le ThisItem ici faisant référence au projet actif de la galerie parente)Le LookUp() sur le text input en blanc sur le schéma peut alors être écrit ainsi :
LookUp(SAISIES; ProjetID = ThisItem._ProjetID && Date = ThisItem.Date).Temps
Note : je trouve personnellement qu’une bonne pratique consiste à préfixer le nom des colonnes ajoutées via un AddColumns() avec un caractère “_”…
Et voilààààà…
Connectez-vous pour répondre.