Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Repeater vẫn còn dữ liệu khi remove item cuối cùng trong list

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    2

    Question Repeater vẫn còn dữ liệu khi remove item cuối cùng trong list

    Mình có câu hỏi mong các bạn giúp đỡ:
    Mình làm một trang shopping cart đơn giản sử dụng repeater để bind dữ liệu từ 1 List<T> trong đó có chức năng remove sản phẩm.
    Chức năng remove vẫn hoạt động bình thường nhưng khi remove item cuối cùng trong list thì repeater vẫn còn dữ liệu của item cuối cùng đó.
    Đây là code của mình
    Visual C# Code:
    1. protected void Page_Load(object sender, EventArgs e)
    2.     {
    3.         if (!IsPostBack)
    4.         {
    5.             if (ProductID != 0)
    6.             {
    7.                 DTO.Products proDTO = busPro.showProductByProID(ProductID)[0];
    8.                 if (proDTO != null)
    9.                 {
    10.                     List<DTO.OrderDetails> li = new List<DTO.OrderDetails>();
    11.                     if(Session["ShoppingCart"] != null)
    12.                     {
    13.                         li = Session["ShoppingCart"] as List<DTO.OrderDetails>;
    14.                     }
    15.                        
    16.                     DTO.OrderDetails odDetails = new DTO.OrderDetails();
    17.                     odDetails.ProID = proDTO.ProID;
    18.                     odDetails.Price = proDTO.Price;
    19.                     odDetails.ProName = proDTO.ProName;
    20.                     odDetails.Picture = proDTO.Picture;
    21.                     odDetails.Quantity = 1;
    22.                     bool found = false;
    23.                     if (li.Count > 0)
    24.                         {
    25.  
    26.                             foreach (DTO.OrderDetails o in li)
    27.                             {
    28.                                 if (o.ProID == proDTO.ProID)
    29.                                 {
    30.                                     found = true;
    31.                                     break;
    32.                                 }
    33.                             }
    34.                         }
    35.                     if (!found)
    36.                     {
    37.                         li.Add(odDetails);
    38.                         Session["ShoppingCart"] = li;
    39.                     }
    40.                         BindingItem();
    41.                    
    42.                 }
    43.             }
    44.         }
    45.     }
    46.  
    47. protected void BindingItem()
    48.     {
    49.         List<DTO.OrderDetails> l = new List<DTO.OrderDetails>();
    50.         if (Session["ShoppingCart"] != null)
    51.         {
    52.             l = Session["ShoppingCart"] as List<DTO.OrderDetails>;
    53.         }
    54.         if (l.Count > 0)
    55.         {
    56.             rpCart.DataSource = l;
    57.             rpCart.DataBind();
    58.  
    59.             //tinh tong tien
    60.             int totalQuantity = 0;
    61.             double totalPrice = 0;
    62.             foreach (DTO.OrderDetails o in l)
    63.             {
    64.                 totalQuantity += o.Quantity;
    65.                 totalPrice += (o.Price * o.Quantity);
    66.             }
    67.             lbTotalQuantity.Text = totalQuantity.ToString();
    68.             lbTotalPrice.Text = String.Format("{0:0.000}", totalPrice);
    69.             Session["Quantity"] = totalQuantity;
    70.             Session["Total"] = totalPrice;
    71.         }
    72.         else
    73.         {
    74.             Session["Quantity"] = 0;
    75.             Session["Total"] = 0;
    76.         }
    77.     }
    78.  
    79.    protected void rpCart_ItemCommand(object source, RepeaterCommandEventArgs e)
    80.     {
    81.         if (e.CommandName == "UpdateItem")
    82.         {
    83.             List<DTO.OrderDetails> list = new List<DTO.OrderDetails>();
    84.             if (Session["ShoppingCart"] != null)
    85.                 list = Session["ShoppingCart"] as List<DTO.OrderDetails>;
    86.             DTO.Products p = busPro.showProductByProID(Convert.ToInt32(e.CommandArgument.ToString()))[0];
    87.             if (list.Count > 0)
    88.             {
    89.                 int quantity = 0;
    90.                 TextBox t = (TextBox)(e.Item.FindControl("txtQuantity"));
    91.                 Int32.TryParse(t.Text, out quantity);
    92.                 if (quantity > 0 && quantity <= p.Quantity)
    93.                 {
    94.                     foreach (DTO.OrderDetails o in list)
    95.                     {
    96.                         if (o.ProID == Convert.ToInt32(e.CommandArgument))
    97.                         {
    98.                             o.Quantity = quantity;
    99.                             break;
    100.                         }
    101.                     }
    102.                 }
    103.             }
    104.             Session["ShoppingCart"] = list;
    105.             BindingItem();
    106.         }
    107.  
    108.         else if (e.CommandName == "RemoveItem")
    109.         {
    110.             List<DTO.OrderDetails> l = new List<DTO.OrderDetails>();
    111.             if (Session["ShoppingCart"] != null)
    112.                 l = Session["ShoppingCart"] as List<DTO.OrderDetails>;
    113.             if (l.Count > 0)
    114.             {
    115.                 foreach (DTO.OrderDetails o in l)
    116.                 {
    117.                     if (o.ProID == Convert.ToInt32(e.CommandArgument.ToString()))
    118.                     {
    119.                         l.Remove(o);
    120.                         break;
    121.                     }
    122.                 }
    123.             }
    124.             Session["ShoppingCart"] = l;
    125.             BindingItem();
    126.             Response.Redirect("~/ShoppingCart.aspx");
    127.         }
    128.     }
    Cám ơn các bạn nhiều
    Đã được chỉnh sửa lần cuối bởi huuhung : 28-09-2011 lúc 03:39 PM. Lý do: bỏ code vào tag

  2. #2
    Ngày gia nhập
    09 2011
    Bài viết
    2

    Mình đã giải quyết được vấn đề rồi lý do là do trong method Bindingdata() mình dùng câu lệnh
    if(list.count>0) {// bind dữ liệu vào repeater }" alt="Công thức toán học Latex" border="0" /> nên khi remove item cuối cùng của list thì repeater không bind lại dữ liệu của list nữa.
    Phải sửa lại là Công thức toán học Latex khi do thì repeater mới reset dc dữ liệu.
    Cám ơn các bạn đã ghé ngang topic này!!Cám ơn

Các đề tài tương tự

  1. tại sao không được phép gọi phương thức Remove (item) trong 1 vòng lặp Foreach ?
    Gửi bởi doveandrose trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 13-08-2013, 07:15 AM
  2. Làm sao lấy item cuối của datalist hoac repeater
    Gửi bởi thanhbaker trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 3
    Bài viết cuối: 23-03-2013, 12:40 AM
  3. Làm sao để update generic list item trong C#?
    Gửi bởi thamtu1912 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 07-01-2012, 05:43 PM
  4. Remove các Item trong ListBox
    Gửi bởi Cloud Strife trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 14
    Bài viết cuối: 14-05-2011, 08:26 AM
  5. Lấy item được chọn trong List CheckBox với lập trình C#
    Gửi bởi Xcross87 trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 28-06-2007, 03:46 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn