【发布时间】:2012-10-24 06:32:21
【问题描述】:
我一直在使用中继器来绑定nested collection。基本上我正在做的是,显示网页中的所有元素和值。
我的方法是,使用嵌套转发器并在current ItemDataBount Event 中绑定a level below 转发器数据源(请参考下面的代码)
为每个项目创建控件并使用Eval 绑定该数据需要大量的复制和粘贴任务。
考虑到DataSource is serializable,这是绑定嵌套集合的有效且最简单的方法吗?
<asp:Repeater ID="rpt1" OnItemDataBound="rpt1_ItemDataBound" runat="server">
<ItemTemplate>
<asp:Label ID="lblSomeProperty" Text='<%#Eval("SomeProperty") %>' runat="server" />
<%--few other controls--%>
<asp:Repeater ID="rpt2"OnItemDataBound="rpt2_ItemDataBound" runat="server">
<ItemTemplate>
<asp:Label ID="Label1" Text='<%#Eval("SomeOtherProperty") %>' runat="server" />
<asp:Repeater ID="rpt3" runat="server">
<ItemTemplate>
<asp:Label ID="Label1" Text='<%#Eval("SomeMoreProperty") %>' runat="server" />
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
rpt1.DataSource = //RootElement IEnumerable
}
}
protected void rpt1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//proceed only if ItemTemplate OR AlternatingItemTemplate
//populate user control values from DataItem in current context
var rpt2 = e.Item.FindControl("rpt2") as Repeater;
rpt2.DataSource = //Child Level1 IEnumerable
}
protected void rpt2_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//bind rpt3 DataSource
}
感谢您的帮助。
【问题讨论】: