我想在另一个转发器内找到转发器。但我无法找到。我的代码是
<asp:Repeater ID="rep_test" runat="server">
<ItemTemplate>
<div id='h<%# DataBinder.Eval(Container, "ItemIndex") %>' class="header" onclick='ToggleDisplay(<%# DataBinder.Eval(Container, "ItemIndex") %>);'>
<%#DataBinder.Eval(Container.DataItem, "ID")%>
</div>
<div id='d<%# DataBinder.Eval(Container, "ItemIndex") %>' class="details">
<asp:Repeater ID="rep_hello" runat="server">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem, "batchid")%><br />
<%#DataBinder.Eval(Container.DataItem, "ts")%><br />
</ItemTemplate>
</asp:Repeater>
<%-- <%#DataBinder.Eval(Container.DataItem, "batchid")%><br />
<%#DataBinder.Eval(Container.DataItem, "ts")%><br />--%>
</div>
</ItemTemplate>
</asp:Repeater>
答案 0 :(得分:3)
如果您将转发器放在另一个转发器的项目模板中,这意味着主转发器(rep_test)的每个项目中都有一个转发器(rep_hello)。所以你实际上需要在repeaterItem中找到转发器。您可以像这样迭代所有嵌套的转发器:
foreach (RepeaterItem item in rep_test)
Repeater rptr = (Repeater)item.FindControl("rep_hello");
答案 1 :(得分:1)
示例:
在 ItemDataBound 事件处理程序中:
protected void rep_test_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
(e.Item.FindControl("rep_hello") as Repeater).DataSource = YourOtherDataSource;
}
}
答案 2 :(得分:0)
您可以尝试使用.FindControl()。在VB中,它将类似于
Dim rpt as Repeater = rep_test.FindControl("rep_hello")
答案 3 :(得分:0)
通常当我看到这种事情时,你想在所有内部中继器上执行某些事件。我通常做的是在ItemDataBound事件中处理这种事情。
将OnItemDataBound属性添加到Repeater。
<asp:Repeater ID="rep_test" runat="server"
OnItemDataBound="rep_test_ItemDataBound">
然后在后端添加一个带有FindControl调用的处理程序。
protected void rptBasket_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater innerRepeater = (Repeater)e.Item.FindControl("rep_hello");
// Now your have your repeater...do what you want with it.
}
}