我想找到购物车中商品的总价。但如果产品有折扣价,我必须得到折扣价,如果没有折扣价,我必须得到总价的正常价格。
这是我的转发器:
<asp:Repeater ID="RptrShoppingCart" runat="server" OnItemDataBound="RptrShoppingCart_ItemDataBound">
<ItemTemplate>
<asp:Label ID="LblProductPrice" runat="server" Text='<%#int.Parse(Eval("DiscountedPrice").ToString()) > 0 ? Convert.ToDecimal(Eval("DiscountedPrice")) * Convert.ToDecimal(Eval("Piece")) : Convert.ToDecimal(Eval("NormalPrice")) * Convert.ToDecimal(Eval("Piece")) %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
<asp:Label ID="LblShoppingCartTotal" runat="server"></asp:Label>
注意:我没有故意写中继器填充代码
我的C#代码:
decimal total = 0;
protected void RptrShoppingCart_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
DataRow dr = function.GetDataRow("SELECT Product.DiscountedPrice FROM ShoppingCart AS SC INNER JOIN Product AS P ON SC.ProductID = P.ID WHERE SC.UserID = '" + Session["UserID"] + "'");
DataRowView item = e.Item.DataItem as DataRowView;
if (Convert.ToDecimal(dr["DiscountedPrice"]) > 0) // This means if it is a discounted price
{
total += Convert.ToDecimal(item["DiscountedPrice"]) * Convert.ToDecimal(item["Piece"]);
}
else
{
total += Convert.ToDecimal(item["NormalPrice"]) * Convert.ToDecimal(item["Piece"]);
}
LblShoppingCartTotal.Text = string.Format("{0:C}", total);
}
例如:我添加正常价格的1件产品:10美元,但折扣价:8美元,并添加正常价格的2件产品:20美元,没有折扣价。
购物车的总和应为:(1 x 8 $)+(2 x 20 $)= 48 $ ,但我的购物车总额看起来为8 $。我在哪里做错了?
答案 0 :(得分:0)
您没关系,您只是将标签设置在页面生命周期的错误部分。
这是最后一次生命周期事件之一,所以你不能出错。
protected override void OnPreRender(EventArgs e)
{
LblShoppingCartTotal.Text = string.Format("{0:C}", total);
}