interdire la sélection d'un item de gallerie

Étiquetté : 

  • interdire la sélection d'un item de gallerie

    Posté par StevannS sur 13 mai 2023 à 9h34

    bonjour, je souhaite interdire la sélection d’un item de galerie en fonction d’une condition.

    J’ai essayé d’aller dans selectable de la galerie mais cela affecte l’ensemble de la galerie. Et j’ai essayé un not(select(parent)) dans onselect de l’item mais cela ne marche pas.

    Merci de votre aide.

    PostID=y6FfHKyETCODL84

    R3dKap a répondu Il y a 9 mois, 2 semaines 1 Membre · 13 Réponses
  • 13 Réponses
  • R3dKap

    Membre
    13 mai 2023 à 10h20

    Salut StevannS,

    Si ton objectif c’est de ne pas exécuter ce qu’il y a dans le Gallery.OnSelect pour certains éléments en fonction de certains critères, il te suffit de spécifier cette condition directement dans ton Gallery.OnSelect :

    If(n    ThisItem.Statut <> "Clôturé";n    ...ton code...n)

    CommentID=bcl9TlhJxAEOHgP, PostID=y6FfHKyETCODL84

  • StevannS

    Membre
    14 mai 2023 à 12h53

    Merci ! en fait j’ai des items dans une galerie. Lorsque je clique un item, il est récupéré dans une textbox . Mais je ne souhaite pas récupérer l’élément pour certains items. Je pensais gérer cela au niveau de la galerie, soit via onselect ou display de l’item mais cela semble ne pas être le cas. Un conseil ?

    CommentID=S3FEfIVm8Lg6EyJ, PostID=y6FfHKyETCODL84

  • DavidZed

    Membre
    15 mai 2023 à 8h01

    Hello StevannS,

    Tu ne peux pas empécher la sélection d’un item, tu peux uniquement mettre une condition sur ce qui se passe quand un item est sélectionné (comme montré par R3dKap ), ou mettre un filtre sur le type d’item si tu fais appel à la propriété .Selected de la galerie ailleurs d’ans l’appli

    Si dans ton textbox tu as : Gallery1.Selected.'Propriété à afficher'

    Tu peux mettre ta condition ici : If(Gallery1.Selected.Statut <> "Cloturé",Gallery1.Selected.'Propriété à afficher' ,"")

    CommentID=sA8GG4nTUAvjEGs, PostID=y6FfHKyETCODL84

  • StevannS

    Membre
    15 mai 2023 à 8h20

    Merci David, je me doutais bien d’une possible impasse… OK donc ! Je gérerai au niveau de la textbox ! Que de subtilités… 🙃

    CommentID=1oV5MjxFXeW2xGa, PostID=y6FfHKyETCODL84

  • DavidZed

    Membre
    15 mai 2023 à 8h25

    A la réflexion, tu peux empêcher la sélection en jouant sur le DisplayMode des items dans la galerie qui ont la formule Select(Parent) dans leur propriété .OnSelect

    Dans le DisplayMode, tu peux mettre If(ThisItem.Statut <> "Cloturé",DisplayMode.Edit, DisplayMode.View)

    Mais il faut le faire sur tous les items cliquables et vérifier que la sélection n’est pas non plus possible avec les taquets de tabulation

    CommentID=z6BxzFxqjmUrueK, PostID=y6FfHKyETCODL84

  • StevannS

    Membre
    15 mai 2023 à 9h19

    j’ai essayé, mais cela ne fonctionne pas. La formule ne s’applique pas…

    CommentID=ddo92kEZbJJmmYs, PostID=y6FfHKyETCODL84

  • R3dKap

    Membre
    16 mai 2023 à 8h24

    C’est normal… Le OnSelect d’une galerie est déclenché même si tu cliques en dehors de tout contrôle… 😅

    CommentID=aS7s20o4KemVYL2, PostID=y6FfHKyETCODL84

  • StevannS

    Membre
    16 mai 2023 à 9h11

    Merci ! je suis dans l’impasse. J’ai essayé au niveau de la TextBox avec If(Gallery1.Selected.Rubrique <> “Généralité”,Gallery1.Selected.Commentaire ,””) mais il ne m’affiche rien lorsque je clique sur n’importe quel autre row que “Généralité”. Petite précision : “Rubrique” est mon 1er row. 🙃

    CommentID=jJ5gvhwnIFTFd2q, PostID=y6FfHKyETCODL84

  • R3dKap

    Membre
    16 mai 2023 à 10h03

    Qu’est-ce que tu veux dire par “Rubrique est mon 1er row” ?

    Tu pourrais mettre une capture avec quelques explications ? Possible pour toi ?

    CommentID=xdXgiAh7LO6Nrdo, PostID=y6FfHKyETCODL84

  • StevannS

    Membre
    16 mai 2023 à 10h54

    Voilà : Chaque ligne de la galerie correspond à un commentaire et les rubriques sont les lignes en 100/200 -> 500. Lorsque je veux modifier un commentaire : Click Modifier + Click galerie pour sélectionner le row concerné. Cette app renseigne un rapport PowerBI.

    Les champs de Modifier récupèrent le gallery.selected.xxxx pour chaque row sélectionné. Mais voilà, je ne souhaite pas que les rubriques puissent être sélectionnées. D’où mes questions ci-dessus. Et, tout bête, je souhaite que les champs soient vides à l’ouverture de Modifier mais ce n’est pas le cas. Mes champs sont bien vides à la 1ère ouverture, mais pas après : chaque sélection précédente est gardée en mémoire … J’ai tenté un reset sur le onselect de Modifier ou des icones Save et Out mais cela ne fonctionne pas…

    CommentID=7DmlUwP6nbbsw8x, PostID=y6FfHKyETCODL84

  • R3dKap

    Membre
    16 mai 2023 à 17h19

    Ok, je vois. Je pense avoir compris : tes lignes ELEC 100 et ELEC 200 (que tu appelles des lignes de rubriques) sont les lignes “parentes” des lignes ELEC 101 à 199 (que tu appelles des lignes de commentaires). C’est probablement la raison pour laquelle tu as mis un petit triangle noir à côté du libellé de ces lignes-là.

    Et donc ce que tu veux c’est que lorsque l’on clique sur les lignes de rubriques on ne puisse pas les modifier dans les champs NRJ, Ordre, Commentaire, etc. du bas. Mais que seules les lignes de commentaires peuvent être modifiées.

    C’est bien ça ?

    Si c’est ça ce ta cible, je te propose de revoir un peu la manière dont ton écran est organisé pour en faciliter l’utilisation pour tes utilisateurs et pour en faciliter aussi la gestion et le coding pour toi.

    L’idée générale serait la suivante :

    • On enlève le bouton MODIFIER car il n’a pas trop d’utilité ici. C’est lorsque l’on clique sur un élément qu’on peut directement le modifier.

    • On affiche le formulaire QUE lorsque l’on a cliqué sur un élément de la galerie ou que l’on a cliqué sur le bouton NOUVELLE SAISIE. Sinon on le masque et la galerie offre alors plus de hauteur pour faire défiler les éléments.

    • On utilise pas la propriété Selected de la galerie qui n’est pas pratique car elle a TOUJOURS une valeur. Donc, impossible de “dire à la galerie” qu’aucun élément n’a été sélectionné par l’utilisateur.

    • On va placer un icône par dessus toute la surface de l’élément répétitif de la galerie pour qu’on puisse conditionner son DisplayMode et permettre selon certains critères de cliquer dessus pour éditer un élément ou justement de ne pas pouvoir cliquer dessus et ne pas éditer un élément.

    Mais avant que je te donne les instructions, j’ai besoin de savoir quelle est ta source de données : SharePoint ? Fichier Excel ?

    Et il me faudrait la formule que tu as mise dans la propriété Items de ta galerie stp.

    Et dernière question : je suppose que les champs de saisie tu les as placés à la main et tu n’utilises pas le contrôle Formulaire de Power Apps, exact ? Si oui, pourquoi n’utilises-tu pas un contrôle formulaire ?

    CommentID=fA2K6q53fcW6FxZ, PostID=y6FfHKyETCODL84

  • StevannS

    Membre
    16 mai 2023 à 17h57

    Merci pour ces observations. Oui c’est ca ! La source de mes données est une liste Sharepoint que je place dans une collection au lancement de l’AP. Lorsque je sauvegarde, je supprime toutes les données de ma liste sharepoint et les sauvegarde intégralement depuis ma collection. Pour les champs de saisie, en effet, ce sont des TextInput. Quant à la non utilisation du contrôle formulaire, cela suppose de fonctionner en direct ave la liste sharepoint alors que je passe par la collection. Mais je suis à l’écoute de toute suggestion…

    code ITEM de ma galerie :

    SortByColumns(Filter(Liste_Commentaires;

    DropdownNRJ.Selected.Value=”ALL” || Titre=DropdownNRJ.Selected.Value;

    Année=DropdownAnnée.Selected.Value)

    ;”Ordre”;SortOrder.Ascending)

    A dispo pour toutes précisions ! 😀

    CommentID=MfoOtT1SG8pJKnh, PostID=y6FfHKyETCODL84

  • R3dKap

    Membre
    17 mai 2023 à 7h53

    Ok, nickel. Alors, l’utilisation de la collection sur ta galerie c’est uniquement si tu es certains de pouvoir toujours limiter la quantité d’éléments rapatriés de ta liste SharePoint à moins de 2000 éléments, car Power Apps ne pourra pas aller au-delà. Dans le cas contraire je te suggère de brancher ta galerie directement sur ta liste SharePoint.

    Du coup, voilà ce que je te propose de faire :

    1. Dans la galerie tu rajoutes un icône (n’importe lequel, j’utilise souvent le “+”) avec X=0, Y=0, Width=Parent.TemplateWidth, Height=Parent.TemplateHeight et tu lui mets une couleur transparente partout pour qu’on ne voie jamais le “+” ni au survol ni au clic. L’avantage d’utiliser un icône c’est que l’on voie une main au survol lorsqu’il est cliquable (DisplayMode = Edit) et une flèche lorsqu’il n’est pas cliquable (DisplayMode = Disabled).

    2. Assure-toi que ton icône poubelle rouge soit bien placé au-dessus de cet icône “+”

    3. Met la formule suivante dans la propriété DisplayMode de cet icône “+” : If(ElecValue = 100 || ElecValue = 200; DisplayMode.Disabled; DisplayMode.Edit). Je te laisse remplacer ElecValue par la colonne de ta source de données qui contient cette info bien sûr 😉

    4. Dans la propriété OnSelect de cet icône “+” met ceci : UpdateContext({locSelectedItem: ThisItem}) -> On définit l’élément en cours dans une variable locale

    5. Supprime tout ce qu’il y a dans la propriété OnSelect de ta galerie (on en plus besoin, c’est l’icône “+” qui pilote la sélection)

    6. Ah, je te propose aussi de mettre ceci dans la propriété DisabledFill de l’icône “+” : If(Self.DisplayMode = DisplayMode.Disabled; RGBA(0;0;0;0,1). Comme ça, l’utilisateur identifiera tout de suite les éléments sur lesquels il ne pourra pas cliquer).

    7. A ta place j’enlèverai même l’icône “>” qui n’a pas trop de sens ici vu qu’on ne navigue pas vers un autre écran (on l’utilise plutôt lorsque l’on va vers un autre écran et que l’on utilise une transition d’écran qui glisse de la droite vers la gauche par ex.)

    8. Supprime le bouton MODIFIER

    9. Supprime tous tes champs

    10. Supprime ton bouton SAUVEGARDE FINALE

    11. Déplace ton icône de sortie plutôt en haut à droite de l’écran à côté du logo car là il est trop près du bouton de sauvegarde (disquette) -> pas recommandé en terme d’UX/UI 😉

    12. A l’intérieur du cadre bleu rajoute un contrôle formulaire Form1 et tu mets les champs nécessaires

    13. Dans Form1.Datasource tu mets directement ta liste SharePoint

    14. Dans Form1.Item tu mets locSelectedItem

    15. Sur le OnSelect de ton bouton de sauvegarde (disquette) tu mets juste : SubmitForm(Form1)

    16. Dans Form1.OnSuccess tu mets : Notify("Votre commentaire a été enregistré avec succès; NotificationType.Success; 4000);; UpdateContext({locSelectedItem: Blank()})

    17. Modifie la propriété OnSelect de l’icône “+” ajouté dans la galerie : UpdateContext({locSelectedItem: ThisItem});; EditForm(Form1)

    18. Sur le OnSelect du bouton NOUVELLE SAISIE met ceci : NewForm(Form1)

    19. Sur le Visible de ton cadre bleu : Not(IsBlank(locSelectedItem)) || Form1.Mode = FormMode.New -> le cadre bleu avec le formulaire et le bouton d’enregistrement est visible si on a cliqué sur un élément (il y a une valeur dans locSelectedItem) ou si on a cliqué sur NOUVELLE SAISIE et que donc le mode du formulaire est New.

    20. Du coup, sur le OnVisible de ton écran il faut que tu mettes : EditForm(Form1) pour que par défaut ton cadre bleu ne s’affiche pas.

    Voilà je pense qu’on a fait le tour. Et à ta place je brancherais direct ma galerie sur la liste SharePoint et je laisserais tomber la collection. Ca complexifie les choses et pour l’instant tentons déjà de le faire marche en direct. On pourra voir plus tard pour optimiser les perfs mais à mon avis déjà comme ça ça devrait rouler…

    Hésite pas si t’as des questions…

    CommentID=Lvf4ogsqiFhjkzZ, PostID=y6FfHKyETCODL84

Connectez-vous pour répondre.