Lier 2 galleries dans 2 écrans

  • Lier 2 galleries dans 2 écrans

    Posté par Nicolas sur 26 août 2024 à 15h12

    Bonjour,

    J’essaie sans succès de lier l’enregistrement sélectionné sur une galerie dans un 1er écran avec les enregistrements d’une autre galerie située sur un 2ème écran. Chaque galerie affiche les données d’une table Datverse (liaison 1 à N).

    Plus en détail, voici les informations :

    Ecran 1 :

    1 enregistrement sélectionné par clic dans la Galerie 1 en lien avec la Table 1 (Num_QCM est la colonne primaire avec un numéro auto, les autres champs sont des champs texte).

    Ecran 2 :

    Dans la Galerie 2, il faut pouvoir afficher tous les enregistrements de la Table 2 qui sont liés à l’enregistrement sélectionné sur le 1er écran. La Table 2 contient les champs : Num_QST en colonne primaire avec un numéro auto, ID_QCM_QST en Recherche. Les autres champs sont de type texte.

    La Table 1 a une relation 1 à N avec la Table 2 par le champs ID_QCM_QST de la Table 2.

    Pour 1 enregistrement de la Table 1 il y a donc plusieurs enregistrements liés dans la Table 2.

    J’ai essayé avec la fonction Navigate, mais à chaque fois la variable n’est pas du bon type et la galerie 2 n’affiche rien. Avez-vous une solution ?

    En vous remerciant,

    Nicolas

    Nicolas a répondu Il y a 2 mois, 3 semaines 3 Membres · 3 Réponses
  • 3 Réponses
  • Laurent CARRIERE

    Membre
    28 août 2024 à 9h43

    Bonjour

    si je comprends bien dans ta table 1 sur ton écran 1 tu choisis en sélectionnant dans ta galerie un ID (l’ID_QCM_QST de ta table 2).

    Sur le Onselect de ta galerie1, tu peux créer une variable qui récupère ton ID
    Set(Mavariable;ThisItem.ID)
    Dans l’écran suivant les items de ta galerie doivent etre filtrés en fonction de ta variable.
    Filter(Magalerie;ID_QCM_QST=Mavariable)

    Là, soit ca marche, soit il faudra considérer que c’est un champ recherche et donc une table – il faudra mettre un truc du type
    Filter(Magalerie;Choices(Lasourcededonnéeesdetagalerie1;ID_QCM_QST.Value)=Mavariable)

    j’espère que cela te fera avancer – c’était pour apporter ma pierre à l’édifice sans être un spécialiste.
    BOnne journée

  • R3dKap

    Membre
    28 août 2024 à 10h40

    Salut @Nicolas,

    Tout d’abord, dans ton cas de figure je préfère “voir” la relation dans l’autre sens (même si techniquement on peut la voir sur les 2 tables) : un enregistrement de Table 2 est lié à un enregistrement de Table 1 via un champ de recherche ID_QCM_QST. Bref…

    Lier tes galeries n’est pas très compliqué et tu es sur la bonne voie. La seule complexité ici est de bien identifier le format des données traitées.

    Lorsque tu navigues de l’écran 1 vers l’écran 2 tu vas lui transmettre une informations de l’élément cliqué pour pouvoir filtrer ta 2è galerie (je préfères cette technique à la création d’une variable globale -> je limite les variables globales uniquement lorsqu’une information est nécessaire sur plusieurs écrans). Selon l’information que tu vas transmettre il faudra l’utiliser correctement sur ta 2è galerie. Tu noteras que la variable que je transmets à l’écran 2 commence par “loc” puisqu’il s’agira sur l’écran cible d’une variable locale connue de cet écran uniquement).

    <h3>Exemple 1 : tu transmets l’identifiant de Table 1</h3>

    Sur le OnSelect de ta galerie 1 :

    Navigate(Ecran2; ScreenTransition.None; {locNumQCM: ThisItem.Num_QCM})

    Dans ce cas sur l’écran 2, sur le Items de ta galerie :

    Filter(Table2; ID_QCM_QST.Num_QCM = locNumQCM)

    <h3>Exemple 2 : tu transmets la totalité de l’enregistrement de Table 1 sélectionné</h3>

    Sur le OnSelect de ta galerie 1 :

    Navigate(Ecran2; ScreenTransition.None; {locQCM: ThisItem})

    Dans ce cas sur l’écran 2, sur le Items de ta galerie :

    Filter(Table2; ID_QCM_QST.Num_QCM = locQCM.Num_QCM)

    Bref. Faut juste faire attention au format des données transmises pour les utiliser correctement sur le 2è écran.

  • Nicolas

    Membre
    28 août 2024 à 17h11

    Bonjour Laurent et R3dKap,

    Merci beaucoup pour votre aide. Tout fonctionne !

    J’ai fait un mélange de vos 2 réponses. J’utilise une variable globale car l’enregistrement sélectionné sera utilisé sur plusieurs écrans. Je ne savais pas qu’il fallait combiner 2 champs dans la fonction Filter : ID_QCM_QST.Num_QCM = …

    Si j’ai bien compris, l’intérêt de donner comme valeur ThisItem à la variable est de pouvoir récupérer n’importe quel champs de l’enregistrement alors que ThisItem.ID n’enregistre que la valeur de l’ID ? Mais peut-être est-ce plus lourd pour l’affichage ?

    J’ai une autre question à propos de l’affichage d’expressions mathématiques, mais peut-être faut-il que je crée un nouveau post ?

    Encore merci,

    Nicolas

Connectez-vous pour répondre.