可能重复:
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事件中动态设置它?
答案 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并将其保存在全局值中,然后在页脚中使用此全局值。希望这会对你有所帮助。