2011-09-07 48 views
3

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

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

你能否介绍一些直放站的呢? –

+1

你从哪里得到例外?它实际上是否在找到'innerRepeater'?如果它没有找到它,那么你就不能绑定它。 – David

+0

现在该错误已被删除,但仍然我不是能够看到内转发数据 –

回答

2

如果你有在父中继器的页眉或页脚,你的方法可能对他们执行过,因此没有找到内部控制。

尝试检查e.Item.ItemType“只是”要么ListItemType.ItemListItemType.AlternatingItem,只有在这种情况下执行代码。

当然不能保证,如果这就是问题所在。也检查确认中继器ID是否正确,并验证它的直接父中继器的项目模板中,而不是内部的项目内的另一个服务器控件(或者,你需要先找到其他控件,然后找到中继器)。

此外,确保您使用的rep_hello ID不innerRepeater

BTW <你可以在标记也做到这一点...

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

可以使用Container.DataItem代替Eval太(和它转换为对象的父repeater项目类型)。

+0

先生,我已经检查了IDS并没有改变的Container.DataItem只评估和演示后没有效果。谢谢你帮助我 –

+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