2009-08-19 7 views
1

Ich erstellte Dropdown-Liste zur Laufzeit, wenn eine Schaltfläche geklickt wird.und ich placed eine andere Schaltfläche, um den ausgewählten Text aus dynamischen Dropdown-Liste.Wenn ich versuche, den ausgewählten Text aus der Dropdown-Liste abrufen, gibt es mir den Fehler genannt Objektreferenz nicht gesetzt, nachfolgend ist mein Code.dynamische Dropdown-Liste in 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; 


    } 

Antwort

4

Sie können es nicht so machen. Denken Sie daran, dass Sie bei jeder Anfrage ein neues Seitenobjekt und neue Kopien aller darin enthaltenen Steuerelemente erhalten. Jedes Steuerelement, das Sie dynamisch hinzufügen, muss jedes Mal auf die gleiche Weise hinzugefügt werden, andernfalls wird es nicht existieren.

In diesem Fall fügen Sie es einmal hinzu, wenn Sie auf die Schaltfläche klicken. Wenn Sie auf button2 klicken, wird eine Anforderung generiert und ein neues Seitenobjekt erstellt, das Ihre Dropdown-Liste nicht mehr enthält, da es nur im button1-Handler hinzugefügt wird.

Am einfachsten wäre es, wenn Sie Ihre Dropdown-Liste normal zur Seite hinzufügen, aber nur Sichtbar auf false setzen. Wenn sie dann auf die Schaltfläche 1 klicken, setzen Sie Sichtbar auf Wahr. Dadurch wird sichergestellt, dass Ihre Dropdown-Liste immer vorhanden ist.

Dynamische Steuerelemente sind schwierig und sollten nach Möglichkeit vermieden werden, besonders wenn Sie ASP.Net noch nicht kennen.

0

Eigentlich konnte ich es funktioniert ..

ich einen Datensatz vor dem Erstellen von Tabellen erstellt, dann:

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); 

Ich bin kein Experte oder irgendetwas, ich habe gerade picken bis ich es mache, was ich will.