如何将web用户控件添加到中继器
本文关键字:添加 中继器 控件 用户 web | 更新日期: 2023-09-27 18:12:34
场景:
-
UsrControl:自定义用户控件,包含一个文本框和一个按钮,水平重新绘制(在一行中(。
-
UsrControlContainer:自定义用户控件,它应该能够显示多个UsrControl对象(每个对象在单独的行中,因此Seperator模板可能是
<br />
。该控件还包含一个按钮,它将新的UsrControl添加到集合中。
我的代码:
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click"/>
<asp:Repeater ID="rptExample" runat="server">
<ItemTemplate>
</ItemTemplate>
<SeparatorTemplate><br /></SeparatorTemplate>
</asp:Repeater>
和:
protected void Button1_Click(object sender, EventArgs e)
{
rptExample.DataSource = new List<UsrControl> {new UsrControl(), new UsrControl()};
rptExample.DataBind();
}
一个简单的问题——我应该在ItemTemplate
中放入什么才能使其工作?
编辑-我还想在渲染之前将一些参数传递给UsrControl。
<asp:Repeater ID="rptExample" runat="server">
<ItemTemplate>
<uc:UsrControl runat="server" />
</ItemTemplate>
<SeparatorTemplate><br /></SeparatorTemplate>
</asp:Repeater>
protected void Button1_Click(object sender, EventArgs e)
{
rptExample.DataSource = Enumerable.Range(0, 2);
rptExample.DataBind();
}
回答您的问题。您可以捕获ItemDataBound事件中的每个绑定对象。例如,正如我所使用的,将整个对象设置为用户控件属性。
protected void PersonesRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
PersonLine line = (PersonLine)e.Item.FindControl("Person1");
line.Person = e.Item.DataItem as Osoba;
}
}
当然,您必须将事件处理程序添加到中继器中:
<asp:Repeater runat="server" ID="PersonesRepeater" OnItemDataBound="PersonesRepeater_ItemDataBound"><ItemTemplate>
<my:Person ID="Person1" runat="server" />
</ItemTemplate>
</asp:Repeater>