如何绑定内部重复器?

3

我有一个嵌套在另一个repeater里的repeater。现在我想绑定内部的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>

1
你能展示一些那个repeater吗? - Hans Kesting
1
你在哪里得到了异常?它是否实际找到了 innerRepeater?如果它没有首先找到它,那么就无法绑定它。 - David
现在错误已经被修复,但我仍然无法在内部重复器中看到数据。 - Ram Singh
还有一件事,我已经删除了 JavaScript,以便在两个重复器中查看数据。请尽快帮助我。谢谢。 - Ram Singh
3个回答

2
如果在父重复器中有页眉或页脚,则您的方法也可能为它们执行,因此找不到内部控件。
尝试检查e.Item.ItemType是否仅为ListItemType.ItemListItemType.AlternatingItem,并仅在这种情况下执行您的代码。
当然,不能保证这是问题所在。还要确认重复器ID是否正确,并验证它直接位于父重复器的项模板中,而不是位于项内的另一个服务器控件中(否则,您需要先找到其他控件,然后再在其中找到重复器)。
此外,请确保使用rep_hello ID而不是innerRepeater
顺便说一句,您也可以在标记中完成此操作...
<asp:repeater runat="server" id="innerRepeater"
    DataSource='<%# Eval("PropertyInParentObject") %>'  >
    ....
    ....
</asp:repeater>

你也可以使用Container.DataItem代替Eval(并将其转换为父重复项中对象的类型)。


先生,我已经检查了ID,但在将Container.DataItem更改为Eval后没有任何效果。感谢您的帮助。 - Ram Singh

0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接