今天我对ASP.Net数据绑定有了一个小小的乐趣,基本上我有两个嵌套控件,以及一个带有我们希望绑定的内部集合的对象集合......
所以,说我正在使用这样的两个中继器 - >
<asp:Repeater ID="Repeater1">
<ItemTemplate>
<asp:Label runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "HeaderText")%>'>
</asp:Label>
<asp:Repeater ID="Repeater2">
<asp:Label runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "DetailText")%>'>
</asp:Label>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
我的对象看起来像这样:
public class parent
{
public string HeaderText {get;set;}
public List<child> children {get;set;}
}
public class child
{
public string DetailText {get;set;}
}
如何绑定内部中继器?我猜我需要设置&amp;将aspx中某处的'Repeater2'的数据源绑定为'parent'的'children'属性?
有人能指出我正确的方向吗?
由于
答案 0 :(得分:1)
将嵌套转发器绑定在主转发器ItemDataBound
事件中。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx
在这里你可以找到控件(FindControl
)并绑定它。
这将是:
<asp:Repeater ID="Repeater1" OnItemDataBound="Repeater1_ItemDataBound">
void Repeater1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
Repeater Rep2 = e.Item.FindControl("Repeater2");
Rep2.DataSource = //datasource here
Rep2.DataBind();
}
答案 1 :(得分:1)
您可以在外部转发器的ItemDatabound
事件中绑定内部转发器:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Repeater innerRepeater = e.Item.FindControl("InnerRepeater1") as Repeater;
if (innerRepeater != null)
{
innerRepeater.DataSource = GetSomeData();
innerRepeater.DataBind();
}
}
如果需要使用外部数据绑定控件中的数据来绑定内部数据绑定控件,可能更容易使用ListView
或DataList
,因为您可以指定datakeys。
<asp:ListView ID="ListView1" runat="server" DataKeyNames="SomeColumn" ...>
代码隐藏:
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
ListView innerList = e.Item.FindControl("InnerList1") as ListView;
if (innerList != null)
{
innerList.DataSource = GetSomeData((int)ListView1.DataKeys[ListView1.Items.IndexOf(e.Item)]["SomeColumn"]);
innerList.DataBind();
}
}