C# 将控件动态绑定到asp:DataList中的占位符

C# 将控件动态绑定到asp:DataList中的占位符,c#,asp.net,user-controls,placeholder,datalist,C#,Asp.net,User Controls,Placeholder,Datalist,我似乎无法理解这一点,但我正在尝试在运行时将用户控件添加到数据列表中(因为实际控件类型可能不同)。因此,如果我在标记中硬编码控件引用,如下所示: <asp:DataList ID="myDL" runat="server" RepeatDirection="Horizontal" RepeatColumns="3" OnItemDataBound="myDL_Item_Bound"> <ItemTemplate> <prefix:MyCont

我似乎无法理解这一点,但我正在尝试在运行时将用户控件添加到数据列表中(因为实际控件类型可能不同)。因此,如果我在标记中硬编码控件引用,如下所示:

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

但是,如果我尝试以编程方式将其添加到占位符中,它不会呈现用户控件(只是空的td标记):


受保护的无效myDL\u项\u绑定(对象发送方,DataListItemEventArgs e){
如果(e.Item.ItemType==ListItemType.Item | | e.Item.ItemType==ListItemType.AlternatingItem){
占位符ph=(占位符)e.Item.FindControl(“ph”);
如果(ph!=null){
MyControl ctrl=新建MyControl();
ctrl.SomeProp=“xyz”;
ph.Controls.Add(ctrl);
}
否则{
MyControl ctrl=(MyControl)e.Item.FindControl(“myControl1”);
ctrl.SomeProp=“xyz”;
}
}
}

我缺少什么?

您没有将控件添加到页面。您需要添加它:

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

@谢谢你!我知道得更清楚,我只是需要第二双眼睛来看看它,告诉我我在哪里搞砸了
        Control ctrl = (Control)Page.LoadControl("MyControl.ascx"); 
        // MyControl ctrl = new MyControl();
        ctrl.SomeProp = "xyz";
        ph.Controls.Add(ctrl);