开发者

how to bind inner repeater?

i have a repeater inside another repeater. now i want to bind the inner repeater. but i m getting error of "Object reference not set to an instance of an object.". my code is

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

my source code is

<asp:开发者_Python百科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>


If you have a header or footer in the parent repeater, your method might be executed for them too, and hence not finding the inner control.

Try to check if the e.Item.ItemType is "only" either ListItemType.Item or ListItemType.AlternatingItem, and only execute your code in this case.

Of course can't guarantee if this is the problem. Check also for confirming that repeater ID is correct, and verify that it's directly inside the item template of the parent repeater, not inside another server control inside the item (or else, you'll need to find the other control first and then find the repeater inside it).

Also, ensure you are using rep_hello ID not innerRepeater.

BTW< you can do this in the markup too...

<asp:repeater runat="server" id="innerRepeater"
    DataSource='<%# Eval("PropertyInParentObject") %>'  >
    ....
    ....
</asp:repeater>

You can use Container.DataItem instead of Eval too (and cast it to the type of the object in parent repeater item).


You are trying to find a repeater with the ID "innerRepeater". You should use "rep_hello" instead:

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


the follwing links will help you the most efficient way binding nested repeater 3 levels deep

msdn library

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜