IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[GridView][BoundField] Visibilité dépendant d'une fonction


Sujet :

ASP.NET

  1. #1
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut [GridView][BoundField] Visibilité dépendant d'une fonction
    Bonjour à tous !

    J'ai un GridView dans lequel je souhaite masquer certaines colonnes en fonction du contexte. J'ai donc voulu faire la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:BoundField DataField="Fr" HeaderText="Français" Visible='<%# IsCurrentLanguage("Fr") %>' />
    Malheureusement, ça ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur : Les expressions de liaison de données sont uniquement prises
    en charge sur les objets ayant un événement DataBinding.
    Je ne vois pas trop comment faire ça dans le code behind, vu que la visiblité dépend en fait du DataField.

    J'ai aussi essayé avec <%= au lieu de <%#, mais là ça n'essaie même pas d'interpréter le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur : Impossible de créer un objet de type 'System.Boolean' à partir de sa représentation sous forme de chaîne,
    '<%= IsCurrentLanguage("Fr") %>', pour la propriété 'Visible'.
    Quelqu'un aurait-il une idée comment faire ?

    Merci d'avance !
    Wookai


  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Points : 633
    Points
    633
    Par défaut
    Et si tu transformes ton BoundField en ItemTemplat, que dans le visible dans ton label tu appelles cette méthode ?

    Essaie un peu.

    Fix

  3. #3
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    C'est une idée, mais ça ne va pas cacher la colonne, seulement les éléments de celle-ci. Du coup j'aurai une colonne vide, et ça m'arrange pas, vu que je veux la supprimer pour faire de la place ...
    Wookai


  4. #4
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Janvier 2008
    Messages : 106
    Points : 96
    Points
    96
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            protected bool IsCurrentLanguage(String lang)
            {
     
                get { return this.lang; }
     
                set { this.lang = value; }
     
            }
    Essaie quelque chose du genre.

  5. #5
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Euh je suis désolé, mais je ne vois pas trop ce que tu veux dire ? Il me semble même que ton code n'est pas correct, non ? Un mélange entre une Property et une méthode ?
    Wookai


  6. #6
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Janvier 2008
    Messages : 106
    Points : 96
    Points
    96
    Par défaut
    Mdr Ouais c'est un mélange mais ta propriété doit retournée un bool sinon ça ne marche pas.

  7. #7
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Ok, je vois l'idée (même si je crois toujours que la syntaxe est un peu erronée...).

    Et comment je l'utilise dans la page aspx ?
    Wookai


  8. #8
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Bon, j'ai finalement contourné le problème : je modifie la visibilité dans le code-behind, en m'enregistrant à l'événement DataBound du GridView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected void GridView_DataBound(object sender, EventArgs e) {
            GridView gv = (GridView)sender;
            ((BoundField)gv.Columns[1]).Visible= IsCurrentLanguage("Fr");
        }
    Du coup, je peux en fait faire directement ce que je voulais faire à l'origine, à savoir lier au BoundField une Propriété de mon objet dépendant de la langue courante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    protected void GridView_DataBound(object sender, EventArgs e) {
            GridView gv = (GridView)sender;
            ((BoundField)gv.Columns[1]).DataField = String.Format("Name{0}", this.GetCurrentLanguage());
            ((BoundField)gv.Columns[1]).SortExpression = String.Format("Name{0}", this.GetCurrentLanguage());
        }
    Ce n'est peut-être pas le plus élégant, mais ça a le mérite de fonctionner ! Je marque la discussion comme Résolue, mais si quelqu'un a une meilleure solution à me proposer, qu'il/elle n'hésite pas !

    Merci !
    Wookai


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 16/07/2012, 14h10
  2. Réponses: 2
    Dernier message: 24/03/2011, 15h11
  3. Problème de visibilité d'une fonction
    Par hello2lu dans le forum VBA Access
    Réponses: 8
    Dernier message: 03/07/2007, 15h20
  4. [Tableaux] visibilité d'une variable dans une fonction
    Par grinder59 dans le forum Langage
    Réponses: 2
    Dernier message: 10/05/2007, 18h06
  5. Réponses: 1
    Dernier message: 28/03/2007, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo