如何绑定内部中继器?

时间:2011-09-07 13:15:12

标签: asp.net repeater

我在另一个转发器里面有一个转发器。现在我想绑定内部中继器。但我得到的错误是“对象引用没有设置为对象的实例。”。我的代码是

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>

3 个答案:

答案 0 :(得分:2)

如果父转发器中有页眉或页脚,则可能也会为它们执行方法,因此找不到内部控件。

尝试检查e.Item.ItemType是否“仅”ListItemType.ItemListItemType.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)