在ASP.NET Repeater中动态添加控件
问题描述:
我发现我的自己有一个中继器控件,它正在将数据绑定到一个xml文档。我的客户现在正在请求正在转发的文本框可以是文本框或复选框。在ASP.NET Repeater中动态添加控件
我似乎无法找到一个松槽基本上做到以下几点:
if ((System.Xml.XmlNode)e.Item.DataItem.Attributes["type"] == "text")
<asp:TextBox runat="server" ID="txtField" Text='<%#((System.Xml.XmlNode)Container.DataItem).InnerText %>' CssClass="std"></asp:TextBox>
else
<asp:CheckBox runat="server" ID="txtField" Text='<%#((System.Xml.XmlNode)Container.DataItem).InnerText %>' CssClass="std"></asp:TextBox>
有没有一个很好的办法,我可以延长我目前没有implementaion必须重写逻辑。如果我可以通过“OnItemDataBound”注入控件,那也可以。但我似乎无法使其工作
答
在你的标记在每个文本框和复选框控件的东西类似于什么?
Visible=<%= Eval("type").tostring() == "text") %>
答
在你的中继,落个小组,然后创建该转发器的数据的事件处理程序绑定事件和编程创建文本框或复选框,并将其添加为面板的子控件。您应该能够从事件参数中获取DataItem,以获取诸如“type”属性或值的信息,以提供您的Text属性或CSS信息等。
答
我会去mspmsp的消化。这里是一个快速和肮脏的代码作为它的一个例子:
将这个在你的aspx:
<asp:Repeater ID="myRepeater" runat="server" OnItemCreated="myRepeater_ItemCreated">
<ItemTemplate>
<asp:PlaceHolder ID="myPlaceHolder1" runat="server"></asp:PlaceHolder>
<br />
</ItemTemplate>
</asp:Repeater>
这在您的代码隐藏:
dim plh as placeholder
dim uc as usercontrol
protected sub myRepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
if TypeOf e Is ListItemType.Item Or TypeOf e Is ListItemType.AlternatingItem Then
plh = ctype(e.item.findcontrol("myPlaceHolder1"), Placeholder)
uc = Page.LoadControl("~/usercontrols/myUserControl.ascx")
plh.controls.add(uc)
end if
end sub