2013-09-10 2 views
0

Я не могу показаться, что это один, но я пытаюсь добавить элемент управления пользователя в DataList во время выполнения (поскольку фактический тип управления может отличаться). Так что, если я жесткий код ссылки управления в разметке, как это работает:Связывание управляет динамически в PlaceHolder в asp: DataList

<asp:DataList ID="myDL" runat="server" RepeatDirection="Horizontal" RepeatColumns="3" OnItemDataBound="myDL_Item_Bound"> 
    <ItemTemplate> 
     <prefix:MyControl ID="myControl1" runat="server" /> 
    </ItemTemplate> 
</asp:DataList> 

Но если я пытаюсь добавить его программно заполнителем, он не делает пользовательских элементов управления (только пустые теги тд):

<asp:DataList ID="myDL" runat="server" RepeatDirection="Horizontal" RepeatColumns="3" OnItemDataBound="myDL_Item_Bound"> 
    <ItemTemplate> 
     <asp:PlaceHolder ID="ph" runat="server"> 
     </asp:PlaceHolder> 
    </ItemTemplate> 
</asp:DataList> 


protected void myDL_Item_Bound(Object sender, DataListItemEventArgs e) { 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { 
     PlaceHolder ph = (PlaceHolder)e.Item.FindControl("ph"); 
     if (ph != null) { 
      MyControl ctrl = new MyControl(); 
      ctrl.SomeProp = "xyz"; 
      ph.Controls.Add(ctrl); 
     } 
     else { 
      MyControl ctrl = (MyControl)e.Item.FindControl("myControl1"); 
      ctrl.SomeProp = "xyz"; 
     } 
    } 
} 

Что мне не хватает?

ответ

1

Вы не добавляете элемент управления на страницу. Вы должны добавить его:

 Control ctrl = (Control)Page.LoadControl("MyControl.ascx"); 
     // MyControl ctrl = new MyControl(); 
     ctrl.SomeProp = "xyz"; 
     ph.Controls.Add(ctrl); 
+0

@afzaluhl спасибо! Я знаю лучше этого, мне просто нужен был второй набор глаз, чтобы посмотреть на него и сказать, где я напортачил – snappymcsnap

Смежные вопросы