2010-02-24 4 views
2

Je suis en train de concevoir mon propre contrôle personnalisé qui contient une liste déroulante .NET. Ce que je me demande est s'il est possible de remplir ma liste déroulante avec des listitems placés dans un espace réservé?Puis-je renseigner des éléments de liste dans une liste déroulante ASP.NET à partir d'un espace réservé ASP.NET?

Par exemple:

<asp:DropDownList ID="ddlFilter" runat="server" > 
    <asp:PlaceHolder ID="ListItemPlaceholder" runat="server"/> 
</asp:DropDownList> 

Cela ne fonctionne pas parce que le contrôle DropDownList ne permet ListItems que le contrôle des enfants. Mais, je veux faire quelque chose de semblable à ce donc lorsque l'utilisateur comprend mon contrôle sur une page, ils peuvent faire quelque chose comme ceci:

<mytag:MyControl Mode="DropDown" runat="server"> 
    <ListItemTemplate> 
     <asp:ListItem Text="C" Value="c"></asp:ListItem> 
     <asp:ListItem Text="E" Value="e"></asp:ListItem> 
     <asp:ListItem Text="B" Value="b"></asp:ListItem> 
    </ListItemTemplate> 
</myTag:MyControl> 

Toutes les suggestions ou idées? Je sais que je peux le faire en ajoutant dynamiquement les ListItems dans le code de la page, mais je voudrais éviter cela si possible. Merci!

Répondre

2

Une approche serait de donner à votre contrôle une [ParseChildren(true, "ListItemTemplate")] attribute.

Si vous aviez alors une propriété appelée « ListItemTemplate », qui était un tableau de ListItems, votre balisage serait analysé dans cette propriété. Lors de l'exécution de votre contrôle, vous pouvez simplement transmettre à votre liste déroulante le contenu de cette propriété.

quelques exemples de code non testé:

[ParseChildren(true, "ListItemTemplate")] 
    public class MyControl: Control 
    { 
     private ArrayList employees = new ArrayList(); 
     private DropDownList myDropDownList = new DropDownList(); 

     public ArrayList ListItemTemplate 
     { 
     get 
     { 
      return employees; 
     } 
     } 

     protected override void CreateChildControls() 
     { 
     myDropDownList.Items.AddRange(ListItemTemplate): 
     Controls.Add(myDropDownList); 
     } 
    } 
+0

Nice. Je n'ai jamais vu ça avant. – Bryan

+0

Génial, merci! J'ai dû faire quelques modifications, mais votre idée de base a fonctionné comme un charme. – Spencer

Questions connexes