Protected Sub rep_test_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rep_test.ItemDataBound
Dim dt As New DataTable
dt = obj.getdata()
Dim innerRepeater As Repeater = DirectCast(e.Item.FindControl("innerRepeater"), Repeater)
innerRepeater.DataSource = dt
innerRepeater.DataBind()
End Sub
我的源代码是
<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 :(得分:2)
如果父转发器中有页眉或页脚,则可能也会为它们执行方法,因此找不到内部控件。
尝试检查e.Item.ItemType
是否“仅”ListItemType.Item
或ListItemType.AlternatingItem
,并且仅在这种情况下执行您的代码。
当然不能保证这是否是问题所在。还要检查确认转发器ID是否正确,并验证它是否直接位于父转发器的项目模板内,而不是在项目内的其他服务器控件内(否则,您需要先找到另一个控件,然后找到里面的转发器)。
另外,请确保您使用的rep_hello
ID不是innerRepeater
。
顺便说一句&LT;你也可以在标记中做到这一点......
<asp:repeater runat="server" id="innerRepeater"
DataSource='<%# Eval("PropertyInParentObject") %>' >
....
....
</asp:repeater>
您也可以使用Container.DataItem
代替Eval
(并将其转换为父转发器项目中对象的类型)。
答案 1 :(得分:0)
您正在尝试查找ID为“innerRepeater”的转发器。 你应该使用“rep_hello”代替:
Protected Sub rep_test_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rep_test.ItemDataBound
Dim dt As New DataTable
dt = obj.getdata()
Dim innerRepeater As Repeater = DirectCast(e.Item.FindControl("rep_hello"), Repeater)
innerRepeater.DataSource = dt
innerRepeater.DataBind()
End Sub
答案 2 :(得分:0)