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 :

Affichage conditionnel d'un contrôle dans Datalist


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut Affichage conditionnel d'un contrôle dans Datalist
    Bonjour,

    J'ai une datalist alimentée par un objectdatasource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <asp:DataList ID="DataList1" runat="server" 
                        DataSourceID="ObjectDataSourceCriteres" DataKeyField="ID_CRITERE">
                        <ItemTemplate>
                            <asp:Label ID="ID_CRITERELabel" runat="server" 
                                Text='<%# Eval("ID_CRITERE") %>' Visible="false" />                                             
                            <asp:CheckBox ID="CheckBoxCritere" runat="server" Text='<%# Eval("LIBELLE_CRITERE") %>' />
                            <br />
                        </ItemTemplate>
                    </asp:DataList>
    L'objectdatasource me retourne (entre autre) les champs suivants :
    • ID_CRITERE
    • LIBELLE_CRITERE
    • TYPE_CRITERE


    Je souhaiterais que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <asp:CheckBox ID="CheckBoxCritere" runat="server" Text='<%# Eval("LIBELLE_CRITERE") %>' />
    soit remplacé par une expression qui me permettent d'afficher :
    • une Checkbox si TYPE_CRITERE = 1
    • une Textbox si TYPE_CRITERE = 2
    • une Dropdownlist si TYPE_CRITERE = 3


    Savez-vous comment intégrer une telle condition ?
    Merci beaucoup !

    T.

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Pourquoi ne pas créer les trois contrôle dans ton itemTemplate, les mettre à "visible = false" et gérer leur affichage non pas par Eval dans l'ASPX mais sur l'évènement onItemDataBound de ta dataList ?

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Ou bien utiliser un contrôle literal...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut
    Finalement, j'ai fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <asp:DataList ID="DataList1" runat="server" 
                        DataSourceID="ObjectDataSourceCriteres" DataKeyField="ID_CRITERE" 
                        onitemdatabound="DataList1_ItemDataBound">
                        <ItemTemplate>
                            <asp:Label ID="ID_CRITERELabel" runat="server" 
                                Text='<%# Eval("ID_CRITERE") %>' Visible="false" />
                            <asp:HiddenField runat="server" ID="hidTypeControle"></asp:HiddenField>                                            
                            <asp:CheckBox ID="CheckBoxCritere" runat="server"  Visible="false" Text='<%# Eval("LIBELLE_CRITERE") %>' />
                            <asp:Label ID="LabelCritere" runat="server"  Visible="false" Text='<%# Eval("LIBELLE_CRITERE") %>' />
                            <asp:TextBox ID="TextBoxCritere" runat="server" Visible="false"></asp:TextBox>
                            <br />
                        </ItemTemplate>
                    </asp:DataList>
    Et en code Behind :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            byte type_controle = ((CRITERE)(e.Item.DataItem)).CONTROLE.Value;
            ((HiddenField)(e.Item.FindControl("hidTypeControle"))).Value = type_controle.ToString();
            switch (type_controle)
            {
                case 1:
                    ((CheckBox)(e.Item.FindControl("CheckBoxCritere"))).Visible=true;
                    break;
                case 2:
                    ((Label)(e.Item.FindControl("LabelCritere"))).Visible = true;
                    ((TextBox)(e.Item.FindControl("TextBoxCritere"))).Visible = true;
                    break;
                case 3:
                    break;
            }
     
        }
    Je stocke dans un HiddenField le type de contrôle que j'ai affiché.
    Ainsi, lorsqu'il faut récupérer les valeurs (coche ou texte) choisies par l'utilisateur, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    for (int j = 0; j < DataList1.DataKeys.Count; j++)
            {
                type_controle = ((HiddenField)(DataList1.Items[j].FindControl("hidTypeControle"))).Value;
                switch (type_controle)
                {
                    case "1":
                        if (((CheckBox)(DataList1.Items[j].FindControl("CheckBoxCritere"))).Checked)
                            choix[Int32.Parse(DataList1.DataKeys[j].ToString())] = 1;
                        break;
                    case "2":
                        if (((TextBox)(DataList1.Items[j].FindControl("TextBoxCritere"))).Text!="")
                            choix[Int32.Parse(DataList1.DataKeys[j].ToString())] = Int32.Parse(((TextBox)(DataList1.Items[j].FindControl("TextBoxCritere"))).Text);
                        break;
                    case "3":
                        break;
                }
    J'espère que ça ne choquera pas les puristes.
    Si vous avez plus propres...dites moi.
    Merci de votre aide en tout cas,
    T.

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

Discussions similaires

  1. [XL-2010] Affichage conditionnel d'une valeur dans un tableau
    Par Integrator dans le forum Excel
    Réponses: 1
    Dernier message: 23/11/2012, 14h51
  2. "Affichage conditionnel" dans une page JSF
    Par Niniz dans le forum JSF
    Réponses: 2
    Dernier message: 19/07/2007, 12h14
  3. [C#][ASP.NET 1.1] Datalist et affichage conditionnel
    Par Louis-Guillaume Morand dans le forum ASP.NET
    Réponses: 4
    Dernier message: 20/04/2006, 20h23
  4. Sécurité et VBA - Affichage conditionnel de contrôles
    Par Thomas JOUANNOT dans le forum Sécurité
    Réponses: 5
    Dernier message: 23/11/2005, 17h13
  5. [VB.NET] Affichage conditionnel dans un repeater
    Par NicoNGRI dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/02/2005, 12h58

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