2013-03-18 7 views
1

J'ai deux listes déroulantes, dont l'une est remplie au chargement de la page et l'autre ne doit être remplie que lorsqu'une valeur est sélectionnée dans la première. La première liste déroulante est définie comme:Déroulement dynamique d'une liste déroulante basée sur la valeur sélectionnée dans une autre liste déroulante

<asp:DropDownList ID = "base_ddl" runat="server" ToolTip="Base" OnSelectedIndexChanged = "BaseSelected"> 
// snip... 
</asp:DropDownList> 

Ensuite, la deuxième liste déroulante (secondary_ddl) est rempli dans le procédé OnSelectedIndexChanged, BaseSelected.

public void BaseSelected(object sender, EventArgs e) 
    { 
     if (base_ddl.SelectedValue == "-1") 
     { 
      secondary_ddl.Visible = false; 
     } 
     else 
     { 
      secondary_ddl.Items.Clear(); 

      // extract information to populate dropdown here 
      // snip. 
      IList<InfoContainer> info = getInfoBasedOnSelected(base_ddl.Value); 

      foreach (InfoContainer i in info) 
      { 
       secondary_ddl.Items.Add(new ListItem(i.name, i.value)); 
      } 
     } 
    } 

Cela ne fonctionne pas, ce qui conduit à cette question: pourquoi? Comment puis-je mettre à jour dynamiquement cette liste déroulante à partir de la fonction OnSelectedIndexChanged pour l'autre liste déroulante?

+1

d'abord tout ce que vous ne avez pas besoin Databind sur le deuxième menu déroulant que vous ajoutez des éléments. et vérifiez votre liste a-t-elle une valeur? – Zaki

+0

@Samim Je ne le pensais pas, cela a été ajouté lors du débogage. Je suis certain que les éléments ont été ajoutés à la liste (ils sont passés par là et les ont vus). Retiré cette ligne de code pour éviter que cela ne se reproduise, merci. – Jim

+0

Que signifie "Cela ne fonctionne pas"? Qu'attendez-vous et que voyez-vous? Est-ce que la première liste déroulante a AutoPostBack défini sur true? – Igor

Répondre

1

1er set AutoPostBack="True" propriété de base_ddl

puis

secondary_ddl.Items.Clear(); 
IList<InfoContainer> info = getInfoBasedOnSelected(base_ddl.Value); 
secondary_ddl.DataTextField = "name"; 
secondary_ddl.DataValueField = "value"; 
secondary_ddl.DataSource = info; 
secondary_ddl.DataBind(); 
+0

AutoPostBack était l'attribut requis. Ajoutant cela a résolu les problèmes. Merci – Jim

Questions connexes