2011-09-07 49 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