2011-10-04 117 views
3

可能重複:
Accessing parent data in nested repeater, in the HeaderTemplate如何獲取嵌套Repeater內的父數據源Eval()?

我有一個嵌套的中繼器是數據綁定...讓我們說頂層中繼器是一個OrderRow和內部中繼必將從LINEITEM我行D B。 ASPX是這樣的:

<asp:Repeater ID="rptOrder" runat="server"> 
    <ItemTemplate> 
     <%# Eval("OrderID") %>:<br/> 
     <asp:Repeater ID="rptLineItems" runat="server"> 
      <ItemTemplate> 
       <%# Eval("SomeColumn1"); %> 
       <%# Eval("SomeColumn2"); %> 
       <%# Eval("SomeColumn3"); %> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:Button ID="btnAddLine" runat="server" CommandArgument=<%# ???? %> /> 
      </FooterTemplate> 
     </asp:Repeater> 
    </ItemTemplate 
</asp:Repeater> 

現在在內部頁腳按鈕將被用於添加一個新的行項目......但命令參數需要從外中繼器將訂單,所以我們知道哪些爲了添加到。很明顯,常規的Eval()調用在這裏不起作用,因爲它將內部中繼器的DataRowView作爲源[實際上,它不會,因爲它在頁腳中]。我如何得到這個值?我將不得不在外部中繼器的ItemDataBound事件中動態設置它嗎?

回答

2

由於該調用是串行的,因此您可以使用後面的代碼保存最後一個訂單ID並在以後使用。

這是想法。

<asp:Repeater ID="rptOrder" runat="server"> 
    <ItemTemplate> 
     <%#GetOrderID(Container.DataItem)%><br /> 
     <asp:Repeater ID="rptLineItems" runat="server"> 
      <ItemTemplate> 
       <%# Eval("SomeColumn1"); %> 
       <%# Eval("SomeColumn2"); %> 
       <%# Eval("SomeColumn3"); %> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:Button ID="btnAddLine" runat="server" CommandArgument=<%=cLastOrderID%> /> 
      </FooterTemplate> 
     </asp:Repeater> 
    </ItemTemplate 
</asp:Repeater> 

,並在後面

public int cLastOrderID = -1; 

protected string GetOrderID(object oItem) 
{ 
    cLastOrderID = (int)DataBinder.Eval(oItem, "OrderID"); 

    return cLastOrderID.ToString(); 
} 

叫什麼我在這裏做的是,我所說的GetOrderID返回OrderID和我把它保存在一個全球性的值,然後後來我用這個頁腳全球價值。希望這可以幫助你。

+0

謝謝。用一個全局變量完成與此非常類似的事情。只覺得有點哈克。 – Bryan

+0

@Bryan它不hacky,只是看看這個控制是如何深入的,它是一個正常的保存最後一個變量,然後使用它。沒有什麼hacky。 – Aristos