2

.NET ドロップダウン リストを含む独自のカスタム コントロールを設計しています。私が疑問に思っているのは、ドロップダウンリストにプレースホルダーに配置されたリストアイテムを入力できるかどうかです。

例えば:

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

DropDownList コントロールは ListItems のみを子コントロールとして許可するため、これは機能しません。しかし、これと似たようなことをしたいので、ユーザーがページに私のコントロールを含めると、次のようなことができます:

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

提案やアイデアはありますか?ページのコード ビハインドに ListItems を動的に追加することでこれを実行できることはわかっていますが、可能であればそれを避けたいと考えています。ありがとう!

4

1 に答える 1

2

これに対する1つのアプローチは、コントロールに属性を与えることです。[ParseChildren(true, "ListItemTemplate")]

次にListItemTemplate、の配列である ""というプロパティがある場合ListItems、マークアップはそのプロパティに解析されます。コントロールの実行時に、ドロップダウンリストにそのプロパティの内容を渡すだけで済みます。

テストされていないサンプルコード:

   [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);
      }
   }
于 2010-02-24T20:48:35.447 に答える