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

C# Discussion :

ListView + DropDownList


Sujet :

C#

  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Par défaut ListView + DropDownList
    Bonjour à tous,

    J'aimerais savoir comment on fait pour remplir une liste déroulante via code-behind que l'on a placé dans la balise InsertItemTemplate d'une ListView.

    En fait, j'aimerais que lors de l'affichage de mon formulaire d'insertion, affiché les éléments de ma collection dans ma DropDownList. Pour le moment j'ai juste une DropDownList vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <InsertItemTemplate>
                    ...
                   <asp:DropDownList ID="ddlIntervenant" runat="server"></asp:DropDownList>
                    ...
    </InsertItemTemplate>
    J'ai cherché mais j'ai surtout trouvé des forums parlant de récupérer la valeur de cette DropDownList or moi je cherche à la remplir avant ^^ ?

    J'ai tenté de la remplir à l'événement OnLoad de ma ListView en la récupérant via un FindControl mais en vain.

    Quelqu'un aurait-il une solution ?

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    il faut mettre une SqlDataSource (ou autre composant DataSource), et associer ton dropdownlist à cette DataSource via la propriété DataSourceID
    Il faut aussi définir:
    - DataTextField : le champ de la source de données à afficher (le libellé)
    - DataValueField : le champ de la source de données utilisé comme valeur (l'identifiant)

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Par défaut
    Merci pour l'aide.

    Mais à quel moment dans le code-behind dois-je mettre cela ? Dans le ListView_DataBound ? ListView_Load ? etc...

    Et sinon, pour faire cela, il faut que je puisse récupérer la ddl qui est dans la balise insertItemTemplate non?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par cnguyen Voir le message
    Mais à quel moment dans le code-behind dois-je mettre cela ? Dans le ListView_DataBound ? ListView_Load ? etc...

    Et sinon, pour faire cela, il faut que je puisse récupérer la ddl qui est dans la balise insertItemTemplate non?
    Pourquoi veux-tu le faire dans le code-behind ? c'est beaucoup plus simple de le faire dans le code aspx...
    Si tu tiens à le faire en code-behind, le Page_Load ou ListView_Load s'y prêtent bien. Pour récupérer la ddl, utilise ListView1.FindControl

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Par défaut
    Je veux le faire en code behind car ma source de données est une Collection comportant mes contacts LDAP que je récupère en code behind. je veux donc binder le contenu de ma collection à ma DropDownList de ma ListView dans l'élément InsertItemTemplate.

  6. #6
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Par défaut
    J'ai donc essayé de passer par le code behind au niveau de l'événement Load de la ListView:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            protected void ListViewNewPDJ_Load(object sender, EventArgs e)
            {
                string m;
                IList<User> p = UsersAccess.GetListUser(null, out m);
     
                DropDownList ddl = (DropDownList)(ListViewNewPDJ.InsertItem.FindControl("ddlIntervenant"));
                if (ddl != null)
                {
                    ddl.DataSource = p;
                    ddl.DataTextField = "Nom";
                    ddl.DataValueField = "Prenom";
                }
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <asp:ListView ID="ListViewNewPDJ" runat="server" onLoad="ListViewNewPDJ_Load">
    ...
    <InsertItemTemplate>
    ....
    <asp:DropDownList ID="ddlIntervenant" runat="server" ></asp:DropDownList>
    ...
    Cependant, je me heurte au message d'erreur suivant :
    La référence d'objet n'est pas définie à une instance d'un objet.

    Une idée ? J'ai l'impression qu'il ne trouve pas ma DDL ?

    J'ai essayé de faire :
    (ListViewNewPDJ.InsertItem.FindControl("ddlIntervenant"));
    ou
    (ListViewNewPDJ.FindControl("ddlIntervenant"));
    Mais rien n'y fait...

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bizarre... pourtant l'exemple dans la doc de la propriété InsertItem utilise exactement la même technique

    Citation Envoyé par cnguyen Voir le message
    Cependant, je me heurte au message d'erreur suivant :
    La référence d'objet n'est pas définie à une instance d'un objet.
    Dans ce cas je ne pense pas que ce soit parce qu'il ne trouve pas la DDL : dans ton code, tu vérifies que ddl n'est pas null avant de l'utiliser. Donc à mon avis ça se produit avant... Tu es sûr que c'est pas l'instruction précédente (UsersAccess.GetListUser) qui cause l'exception ? Essaie de debugger en pas à pas pour voir ce qui se passe

  8. #8
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Par défaut
    J'ai déjà vérifié en debbugant pour voir d'où venait le problème et elle vient bien de la liste déroulante retourné par le FindControl qui est null. Quand j'observe ma GetUser, celle ci me retourne bien les éléments voulus.

    A savoir que lorsque je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DropDownList ddl = (DropDownList)(ListViewNewPDJ.InsertItem.FindControl("ddlIntervenant"));
    Il m'indique dès le chargement de la page :
    La référence d'objet n'est pas définie à une instance d'un objet.

    Et quand je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DropDownList ddl = (DropDownList)(ListViewNewPDJ.FindControl("ddlIntervenant"));
    Il m'indique la même erreur mais uniquement au moment où je souhaite ajouter un nouvel élément.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ah ok...
    En fait, si tu fais un cast de cette façon, ça ne sert à rien de vérifier ensuite que ddl est null, parce qu'une exception aura déjà été levée. Personnellement je préfère utiliser l'opérateur as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DropDownList ddl = (ListViewNewPDJ.InsertItem.FindControl("ddlIntervenant")) as DropDownList;
    Ca ne lève jamais d'exception, ça renvoie null si la conversion échoue

    Mais bon, ça n'explique pas vraiment pourquoi il ne trouve pas ton contrôle... tu as vérifié que InsertItem n'est pas null ?

  10. #10
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Par défaut
    Ok j'ai utilisé ta façon de caster.

    Sinon j'avais justement mis null car je savais que lors du chargement de la page, le InsertItem valait null.

    Donc au premier chargement de la page, le InsertItem est null. Et ?

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par cnguyen Voir le message
    Donc au premier chargement de la page, le InsertItem est null. Et ?
    Ben tu peux pas appeler FindControl sur une référence nulle... il faut que tu vérifies avant que Insert n'est pas null

  12. #12
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Par défaut
    Alors j'ai trouvé le problème qui ne venait pas de là.

    En fait, ce n'est pas à ce niveau là qu'il fallait remplir la DDL mais plutôt au moment où l'on indique le ListView.InsertItemPosition.

    Pour explication, lors d'un clic sur un bouton, j'ouvre le formulaire de création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            protected void NewPdj_Click(object sender, EventArgs e)
            {
                ListViewPDJ.EditIndex = -1;
                ListViewPDJ.InsertItemPosition = InsertItemPosition.LastItem;
                ...
            }
    C'est donc ici qu'il faut récupérer sa DDL et la binder à sa source.

    Merci encore pour ton aide!

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

Discussions similaires

  1. [Débutant] Dropdownlist dans listview
    Par he-gauth dans le forum ASP.NET
    Réponses: 2
    Dernier message: 07/11/2013, 15h48
  2. Réponses: 2
    Dernier message: 05/05/2009, 11h08
  3. dropdownlist dans un EditItemTemplate d'une listview
    Par acbdev dans le forum ASP.NET
    Réponses: 1
    Dernier message: 15/12/2008, 15h51
  4. ListView DropDownList et problème de databinding
    Par neo.51 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 15/04/2008, 17h17
  5. ListView
    Par SnickeursMan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/08/2002, 10h42

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