2009-08-19 6 views
1

J'ai créé dropdownlist à l'exécution quand un bouton est cliqué. Et j'ai palced un autre bouton pour obtenir le texte sélectionné de la liste déroulante dynamique. Quand j'essaye de récupérer le texte choisi de la liste déroulante il me donne l'erreur appelée La référence d'objet n'est pas définie, le suivant est mon code.dropdownlist dynamique dans asp.net

TableRow tr; 
    TableCell tc; 
    DropDownList dp; 
    TextBox txt; 
    protected void Button1_Click(object sender, EventArgs e) 
    { 

     int no = int.Parse(TextBox1.Text); 
     for (int i = 0; i < no; i++) 
     { 
      tr = new TableRow(); 
      tr.BorderStyle = BorderStyle.Groove; 
      for (int j = 0; j < 1; j++) 
      { 
       tc = new TableCell(); 
       tc.BorderStyle = BorderStyle.Groove; 
       dp = new DropDownList(); 
       //form1.Controls.Add(dp); 
       txt = new TextBox(); 
       dp.Items.Add("hello"); 
       tc.Controls.Add(dp); 
       tc.Controls.Add(txt); 
       tr.Cells.Add(tc); 
      } 

      Table1.Rows.Add(tr); 

     } 
    } 
    protected void Button2_Click(object sender, EventArgs e) 
    { 

     TextBox1.Text =((DropDownList)this.FindControl("dp")).SelectedItem.Text; 


    } 

Répondre

4

Vous ne pouvez pas le faire de cette façon. Rappelez-vous que sur chaque demande, vous obtenez un nouvel objet page, et nouvelles copies de tous les contrôles en elle. Tout contrôle que vous ajoutez dynamiquement doit être ajouté de la même manière à chaque fois, sinon il n'existe pas.

Dans ce cas, vous l'ajoutez une fois, lorsque le bouton est cliqué. Lorsque vous cliquez sur le bouton 2, une demande est générée et un nouvel objet de page est créé qui n'a plus votre liste déroulante, car il est uniquement ajouté dans le gestionnaire button1. La meilleure chose à faire serait d'ajouter votre liste déroulante à la page normalement, mais il suffit de définir Visible à faux. Ensuite, lorsqu'ils cliquent sur le bouton 1, définissez Visible sur true. Cela garantira que votre liste déroulante sera toujours présente.

Les contrôles dynamiques sont délicats et doivent être évités autant que possible, en particulier si vous débutez avec ASP.Net.

0

En fait, je suis en mesure de le faire fonctionner ..

J'ai créé un ensemble de données avant la création de la table, puis:

tc = new TableCell(); 
    dd= new DropDownList(); 
    ddl.ID = dd1; 

    foreach (DataRow dr in dst.Tables[0].Rows) 
    { 
     ddl.Items.Add(new ListItem(dr["Text"].ToString(),dr["Value"].ToString())); 
    } 
    tcActions.Controls.Add(ddlActions); 

Je ne suis pas un expert ou quoi que ce soit, je viens de picorer jusqu'à ce que je le fasse faire ce que je veux.