我有一个页面,其中列出了几个酒店,对于每个酒店,我列出了用户选择的每个日期的价格。
我的HTML如下所示:
<table>
<asp:Repeater ID="rptrHotels" runat="server">
<ItemTemplate>
<tr><td><%# Eval("HotelName") %></td></tr>
<tr>
<asp:Repeater ID="rptrHotelRates" runat="server" DataSource='<%# GetHotelRates(Container.DataItem) %>'>
<ItemTemplate>
<td>
<span class="date"><%# Eval("Date") %></span>
<span class="price">$<%# Eval("Price") %></span>
</td>
</ItemTemplate>
</asp:Repeater>
<td>
<span class="date">Total</span>
<span class="price">$<asp:Literal ID="litTotal" runat="server" /></span>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>和我的代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DateTime startDate = Request.QueryString["StartDate"];
DateTime endDate = Request.QueryString["EndDate"];
List<Hotel> hotels = GetHotels(startDate, endDate);
rptrHotels.DataSource = hotels;
rptrHotels.DataBind();
}
}
protected List<Rate> GetHotelRates(object item)
{
DateTime startDate = Request.QueryString["StartDate"];
DateTime endDate = Request.QueryString["EndDate"];
Hotel hotel = (Hotel)item;
List<Rate> rates = GetRates(hotel, startDate, endDate);
decimal total = (from r in rates
select r.Price).Sum();
return rates;
}在我的GetHotelRates()函数中,我通过将所有价格相加得到总价格。但是我需要以某种方式将这个值放在litTotal中,它在子中继器之外,但在父中继器内。
我该怎么做呢?
发布于 2011-06-04 04:42:40
在你的项目绑定事件中做一些类似这样的事情:
((Literal)((Repeater)sender).Parent.FindControl("litTotal")).Text;你可能需要在父母身上再做一次施法,才能把它送到转播者那里,但我不确定。
发布于 2011-06-04 04:47:20
你总是可以尝试一些NamingContainer.Parent.Parent....FindControl (夸张的)魔法,但更简单的方法是创建一个单独的方法来获得总数:
protected decimal GetHotelTotal(object item)
{
Hotel hotel = (Hotel)item;
List<Rate> rates = GetRates(hotel, startDate, endDate);
decimal total = (from r in rates
select r.Price).Sum();
return total;
}在你的文字中调用这个:
<asp:Literal ID="litTotal" runat="server" Text="<%# GetHotelTotal(Container.DataItem) %>" />https://stackoverflow.com/questions/6232323
复制相似问题