通过中继器在面板中动态加载控件
本文关键字:动态 加载 控件 中继器 | 更新日期: 2023-09-27 18:17:12
我试图通过我在数据库中所有的web控件循环,并将它们添加到中继器中的占位符,如果它们存在的话。我可以算出来,但我不能算出来的是,我通常加载一个控件到一个占位符,如:
WebHosting ctrlWebhosting = (WebHosting)Page.LoadControl("~/Controls/" + nRow["ClientServiceList"]);
然而,我如何转换到一个WebHosting,例如,如果从一个项目从数据库。
我想过像下面这样的东西,但它不起作用:
DataRowView nRow = null;
switch (e.Item.ItemType)
{
case ListItemType.Item:
case ListItemType.AlternatingItem:
nRow = (DataRowView)e.Item.DataItem;
Panel PlaceHolder1 = (Panel)e.Item.FindControl("phService");
nRow["ClientServiceList"] ctrlWebhosting = (nRow["ClientServiceList"])Page.LoadControl("~/Controls/" + nRow["ClientServiceList"]);
ctrlWebhosting.CompanyID = Session["CompanyID"].ToString();
PlaceHolder1.Controls.Add(ctrlWebhosting);
break;
}
中继器正面为:
<asp:Repeater runat="server" ID="rptServices" OnItemDataBound="rptServices_ItemDataBound">
<itemtemplate>
<asp:PlaceHolder runat="server" ID="phService"></asp:PlaceHolder>
</itemtemplate>
</asp:Repeater>
反射是你的朋友,激活器。CreateInstance将允许您按名称加载类型。几年前,我在一个定制的CMS中使用了类似的方法。
你不能给一个不存在的属性赋值,所以对于任何扩展自定义控件的控件使用基类,而不是webcontrol。
你有你自己的类控件的属性,你需要,可以加载和他们的页面基于名称的方式
我已经没有使用c#的经验了,但是我认为这样可以。