none
creer un dropdownlist en c#

    Question

  • Bonjour,

    Cela fait longtemps que je cherche comment creer un dropdownlist en c# ayant les memes proprietes que lorsqu'on le cree en asp.net (c'est à dire pouvoir recuperer l'element selectionné par l'utilisateur et les evenements associés aux ddl) mais en vain.
    Voici ce que j'ai reussi à faire :
    [code]
                d1 = new DropDownList();
                d1 = new DropDownList();
                //d1 = ddlTempl; J'ai essayé de copier une ddl declaré en asp.net mais cela n'a rien résolu
                d1.ID = "d1";
                d1.CssClass = "ddlServer";
                ListItem li = new ListItem("server1", "10");
                ListItem li3 = new ListItem("server2", "13");
                ListItem li2 = new ListItem("server3", "12");
                d1.Items.Add(li);
                d1.Items.Add(li3);
                d1.Items[0].Selected = true;
                d1.Items.Add(li2);
               Panel2.Controls.Add(d1);
           
    [/code]

    Le ddl est crée mais lorsque que l'on choisit un item (exemple server3), et que je regarde ce que vaut d1.selectedItem.text j'ai "server1" (celui que j'ai selectionné lors de la creation du ddl).

    Je vois vraiment pas comment faire pouvoir recuperer l'item selectionné par l'utilisateur.
    svp aidez moi.
    Sunday, February 21, 2010 7:53 PM

Answers

  • Bonjour,

     

    J’ai créé un petit projet pour exemplifier votre problème.

    Ajoutez un contrôle Panel (Panel1) et un Label (Label1) sur votre page. Le code suivant ajoute un drowpdownlist dynamique dans le Panel sur la page et chaque vois que vous sélectez un élément dans la liste il met la valeur de l’élément dans la propriété Text du contrôle Label (qui n'est pas . J’espère que ce code  vous sera utile. Il faut lire la documentation pour viewstate  , car les contrôles dynamiques perdent leur valeur a chaque postback, donc ils doivent être recrées et leurs valeurs gardées a l’aide de SaveViewState.

     

    protected void Page_Load(object sender, EventArgs e)
            {
               
                    if(!Page.IsPostBack) CreateList(); 
            }
     
            protected void CreateList()
            {
                DropDownList ddl = new DropDownList();
                ddl.AutoPostBack = true;
     
                ListItem l1 = new ListItem("item1");
                ListItem l2 = new ListItem("item2");
     
                ddl.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged);
                 
                ddl.Items.Add(l1);
                ddl.Items.Add(l2);
     
                this.Panel1.Controls.Add(ddl);
            }
     
            protected void OnSelectedIndexChanged(object sender, EventArgs e)
            {
                Label1.Text = ((DropDownList)sender).Text;
            }
     
            protected override object SaveViewState()
            {
                object[] newViewState = new object[2];
                newViewState[0] = ((DropDownList)this.Panel1.Controls[1]).Text;
                newViewState[1] = base.SaveViewState();
     
                return newViewState; 
            }
     
            protected override void LoadViewState(object savedState)
            {
                CreateList();           
            }

     

     

    Cordialement,

    Alex

     
    Alex Petrescu - MSFT
    Wednesday, March 03, 2010 10:19 AM
    Moderator

All replies

  • Bonjour,

    Votre DropDownList est-elle remplie à chaque traitement de la page ? Le ViewState est-il activé sur ce ComboBox ?

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    Sunday, February 21, 2010 11:42 PM
    Moderator
  • Bonjour,
    en faite, je sais pas trop ce qu'est le viewstate. En recherchant sur le net, j'avais trouvé une solution (qui ne marche pas) avec ce viewstate et j'ai oublié de l'effacer, désolé.
    La dropdownlist est remplie à chaque fois qu'on appuye sur un bouton. Donc non, elle ne se remplie pas à chaque traitement de la page.
    Une idée?
    Monday, February 22, 2010 1:08 PM
  • Bonjour,

     

    Vous voulez donc faire une application windows en C# ? Dans les application desktop, pour récupérer l’élément sélectionné par l’utilisateur il faut lire la propriété Text du ComboBox.

     

    J’espere avoir compris correctement le sens de votre question.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    Wednesday, February 24, 2010 1:19 PM
    Moderator
  • Bonjour,

    M. Petrescu, la question concerne apparement le contexte ASP .NET...

    En regardant le code précédent, je viens de me rendre compte que vous créer dynamiquement un DropDownList.
    Dans ASP .NET, entre chaque PostBack, il est nécessaire de reconstruire par vous même votre ComboBox.

    Ne pouvez-vous pas déclarer un ComboBox de manière statique dans le code ASP .NET ?

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    Wednesday, February 24, 2010 7:58 PM
    Moderator
  • Ah je n'ai pas posté mon probleme au bon endroit?
    Je me suis mal exprimé, en faite, je crée un site web où l'utilisateur enregistre du materiel. Le materiel est situé dans une dropdownlist et pour eviter d'avoir à faire 10 fois un enregistrement, je crée un bouton '+' qui crée dynamiquement en c# (via Ajax) des dropdownlist (ddl). Le probleme est que lorsque l'utilisateur ajoute des ddl, puis selectionne des produits dans ces ddl et valide, je fais

          foreach( DropDownList dd in d1)
                 lesProduit += dd.SelectedItem.Text;

    mais cela me renvoit toujours l'Item selectionné par défaut lors de la creation du ddl.
    Mon ddl est pourtant une variable static.
    Vous voyez? J'espere ne pas etre trop confus.
    Wednesday, February 24, 2010 9:19 PM
  • Bonjour,

    Est-vous obligez de créer dynamiquement vos DropDownList ?
    Avez-vouys essayer de créer DropDownList statique que vous rendez visible / invisible.

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    Wednesday, February 24, 2010 9:22 PM
    Moderator
  • ouui c'est le plan de secours celui là mais comme je suis apprenti j'ai peur qu'on me vire :'(

    Wednesday, February 24, 2010 9:24 PM
  • Bonjour,

     

    Merci pour les clarifications, j’avais l’impression qu’il s’agit d’une application windows qui doit être similaire au comportement d’asp.net.

     

    Je vais déplacer ce thread dans la section ASP.NET.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    Thursday, February 25, 2010 9:26 AM
    Moderator
  • Ok merci et désolé pour l'erreur.
    Sunday, February 28, 2010 12:33 PM
  • Personne ne peut m'aider???
    J'ai déjà vu des liste deroulante crée dynamiquement sur des sites (notamment pour les RH).
    La date butoir de mon projet se rapproche et je n'ai tjs pas de solutions :(.
    Pouvez vous me conseiller des livres traitant ce genre de problemes?
    Tuesday, March 02, 2010 10:35 PM
  • Bonjour,

     

    J’ai créé un petit projet pour exemplifier votre problème.

    Ajoutez un contrôle Panel (Panel1) et un Label (Label1) sur votre page. Le code suivant ajoute un drowpdownlist dynamique dans le Panel sur la page et chaque vois que vous sélectez un élément dans la liste il met la valeur de l’élément dans la propriété Text du contrôle Label (qui n'est pas . J’espère que ce code  vous sera utile. Il faut lire la documentation pour viewstate  , car les contrôles dynamiques perdent leur valeur a chaque postback, donc ils doivent être recrées et leurs valeurs gardées a l’aide de SaveViewState.

     

    protected void Page_Load(object sender, EventArgs e)
            {
               
                    if(!Page.IsPostBack) CreateList(); 
            }
     
            protected void CreateList()
            {
                DropDownList ddl = new DropDownList();
                ddl.AutoPostBack = true;
     
                ListItem l1 = new ListItem("item1");
                ListItem l2 = new ListItem("item2");
     
                ddl.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged);
                 
                ddl.Items.Add(l1);
                ddl.Items.Add(l2);
     
                this.Panel1.Controls.Add(ddl);
            }
     
            protected void OnSelectedIndexChanged(object sender, EventArgs e)
            {
                Label1.Text = ((DropDownList)sender).Text;
            }
     
            protected override object SaveViewState()
            {
                object[] newViewState = new object[2];
                newViewState[0] = ((DropDownList)this.Panel1.Controls[1]).Text;
                newViewState[1] = base.SaveViewState();
     
                return newViewState; 
            }
     
            protected override void LoadViewState(object savedState)
            {
                CreateList();           
            }

     

     

    Cordialement,

    Alex

     
    Alex Petrescu - MSFT
    Wednesday, March 03, 2010 10:19 AM
    Moderator
  • Ah oui quand meme !! Je m'attendais pas à un truc aussi violent...
    Je vais lire tout sa ce week end.
    Merci BEAUCOUP pour votre aide.

    Cordialement.
    Wednesday, March 03, 2010 10:22 PM