Domanda

Sto progettando il mio controllo personalizzato che contiene una DropDownList .NET. Quello che mi chiedo è se è possibile compilare il mio dropdownlist con ListItems collocati in un segnaposto?

Ad esempio:

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

Questo non funziona perché il controllo DropDownList consente solo ListItems come controlli figlio. Ma, voglio fare qualcosa di simile a questo modo quando l'utente include il controllo in una pagina, si può fare qualcosa di simile:

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

Eventuali suggerimenti o idee? So che posso fare questo con l'aggiunta in modo dinamico le ListItems nel codice della pagina dietro, ma mi piacerebbe evitare che, se possibile. Grazie!

È stato utile?

Soluzione

Un approccio a questo sarebbe quello di dare il vostro controllo di un l'attributo [ParseChildren(true, "ListItemTemplate")].

Se poi avessi una proprietà chiamata "ListItemTemplate", che era una serie di ListItems, il vostro codice sarebbe stato analizzato in quella proprietà. In fase di esecuzione nel controllo, si può semplicemente consegnare il tuo dropdownlist il contenuto di quella proprietà.

Alcuni codice non testato esempio:

   [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);
      }
   }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top