هل يمكنني ملء قائمة العناصر في قائمة ASP.NET المنسدلة من ASP.NET Hold؟

StackOverflow https://stackoverflow.com/questions/2329259

سؤال

أقوم بتصميم جهاز التحكم المخصص الخاص بي الذي يحتوي على قائمة DropdownList .NET. ما أتساءل هو ما إذا كان من الممكن ملء قائمة المنسدلة الخاصة بي مع وضع ListItems في عنصر نائب؟

علي سبيل المثال:

<asp:DropDownList ID="ddlFilter" runat="server" >
  <asp:PlaceHolder ID="ListItemPlaceholder" runat="server"/>
</asp: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 ديناميكيًا في رمز الصفحة وراءه ، لكنني أود تجنب ذلك إن أمكن. شكرًا!

هل كانت مفيدة؟

المحلول

طريقة واحدة لهذا هو إعطاء سيطرتك أ [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);
      }
   }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top