如何在嵌套的Repeater中获取父数据源Eval()?

时间:2011-10-04 22:54:00

标签: asp.net data-binding

  

可能重复:
  Accessing parent data in nested repeater, in the HeaderTemplate

我有一个嵌套的转发器是数据绑定...让我们说顶级转发器是一个OrderRow,内部转发器绑定到我的DB的LineItem行。 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>

现在内页脚上的按钮将用于添加新的订单项...但命令参数必须是外部转发器的订单ID,因此我们知道要添加的订单。显然,常规的Eval()调用在这里不起作用,因为它将内部转发器的DataRowView作为源[实际上,它不会,因为它在页脚中]。我如何获得这个价值?我是否必须在外部转发器的ItemDataBound事件中动态设置它?

1 个答案:

答案 0 :(得分: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并将其保存在全局值中,然后在页脚中使用此全局值。希望这会对你有所帮助。