2015-11-24 22 views
0

我無法找到中繼器控制中的「價格」列的小計。它不計算小計。提前致謝!尋找中繼器控制中的列的小計

這裏是標記到中繼器:

<asp:Repeater ID="rptItem" runat="server" OnItemCommand="rptItem_ItemCommand" OnItemDataBound="rptItem_ItemDataBound"> 
     <HeaderTemplate> 
      <table id="carttable"> 
     </HeaderTemplate> 
     <ItemTemplate> 
      <tr> 
       <td> 
        <asp:Button ID="btnDelete" runat="server" Text="Delete" CommandName="delete" CommandArgument='<%# Eval("ProductId") %>' /></td> 
       <td> 
        <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("ImageUrl") %>' CssClass="imagecart" /></td> 
       <td> 
        <asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("ProductName") %>' NavigateUrl='<%# String.Concat("ProductDetails.aspx?ProductId=", Eval("ProductId")) %>'></asp:HyperLink></td> 
       <td> 
        <asp:Label ID="Label1" runat="server" Text='<%# String.Format("{0:C}", Eval("Price")) %>'></asp:Label></td> 
       <td> 
        <asp:TextBox ID="txtQty" runat="server" Width="50"></asp:TextBox><asp:Button ID="btnUpdate" runat="server" Text="update" /></td> 
      </tr> 
     </ItemTemplate> 
     <FooterTemplate> 
      </table> 
      Subtotal: 
      <asp:Label ID="lblSubtotal" runat="server" Text="Label"></asp:Label> 
     </FooterTemplate> 
    </asp:Repeater> 

這裏是後面的代碼:

protected void rptItem_ItemCommand(object source, RepeaterCommandEventArgs e) 
    { 
     if (e.CommandName == "delete") 
     { 
      List<Item> items = Session["Cart"] as List<Item>; 

      var productId = Convert.ToInt32(e.CommandArgument); 
      var itemToDelete = (from Item i in items 
           where i.ProductId == productId 
           select i).FirstOrDefault(); 

      items.Remove(itemToDelete); 
      Session["Cart"] = items; 
     } 

     BindData(); 
    } 

    protected void rptItem_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     double subtotal = 0; 
     double price = 0; 

     if (e.Item.ItemType == ListItemType.Item) 
     { 
      price += Convert.ToDouble(DataBinder.Eval(e.Item.DataItem, "Price")); 
      subtotal += price; 
     } 

     if (e.Item.ItemType == ListItemType.Footer) 
     { 
      Label lblSubtotal = (Label)e.Item.FindControl("lblSubtotal"); 
      lblSubtotal.Text = subtotal.ToString(); 
     } 
    } 
+0

你是否得到任何異常? –

+0

不,我沒有得到任何異常@KaushikMaheta –

+0

那麼你有什麼麻煩? –

回答

2

聲明ItemDataBound事件以外的變量。您的代碼的問題是每個行都綁定到中繼器控件後調用ItemDataBound事件,因此每次您的初始化爲0,因此您沒有得到預期的輸出。

double subtotal = 0; 
double price = 0; 

protected void rptItem_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item) 
    { 
     price += Convert.ToDouble(DataBinder.Eval(e.Item.DataItem, "Price")); 
     subtotal += price; 
    } 

    if (e.Item.ItemType == ListItemType.Footer) 
    { 
     Label lblSubtotal = (Label)e.Item.FindControl("lblSubtotal"); 
     lblSubtotal.Text = subtotal.ToString(); 
    } 
} 
+0

謝謝你的作品!另外,你知道爲什麼價格再次計算,如果我添加另一個項目購物車。例如,產品A($ 1)。如果我添加產品B($ 2),它會計算= 1 + 1 + 2 @Rahul Singh –

+0

我在頁面加載時調用DataBind並刪除rptItem_ItemCommand @Rahul Signh –

+0

@RonT - No我是否意味着當您將新項目添加到購物車時?你是否再次調用'DataBind'方法?還要確保頁面加載使用'!IsPostBack',並且只在初始獲取請求時調用DataBind。 –