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

Đề tài: Lỗi 1 sản phẩm hiện 3 hàng trong khi đặt sản phẩm vào giỏ hàng !

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

    Unhappy Lỗi 1 sản phẩm hiện 3 hàng trong khi đặt sản phẩm vào giỏ hàng !

    Mấy đại ca ơi giúp e với,tình hình là e đang làm 1 cái giỏ hàng nhưng khi chọn 1 sản phẩm nó lại hiện ra 3 hàng cùng lúc
    E đang sửa 3 4 ngày rồi mà hok được,vài ngày nữa nộp bài ùi ai giúp e với hjxhjx

    Code:
    DataTable dt = new DataTable();
        DataSet ds = new DataSet();
        string namesp = "";
        int giaban;
        public string LayTenSach(int masach)
        {
            string str = "provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Server.MapPath("App_Data//csdl.mdb");
            OleDbConnection Olecon = new OleDbConnection(str);
            Olecon.Open();
            string chuoitruyvan = "select  MaSach,TenSach,Gia from Sach where MaSach=" + masach;
            OleDbDataAdapter Oleda = new OleDbDataAdapter(chuoitruyvan, Olecon);
            Oleda.Fill(dt);
            namesp = dt.Rows[0]["TenSach"].ToString();
            return namesp;
        }
        public int LayGiaSach(double masach)
        {
            string str = "provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Server.MapPath("App_Data//csdl.mdb");
            OleDbConnection Olecon = new OleDbConnection(str);
            Olecon.Open();
            string chuoitruyvan = "select MaSach,TenSach,Gia from Sach where MaSach=" + masach;
            OleDbDataAdapter Oleda = new OleDbDataAdapter(chuoitruyvan, Olecon);
            Oleda.Fill(dt);
            giaban = (int)dt.Rows[0]["Gia"];       
            return giaban;
        }
        public void HienSach()
        {
            string str = "provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Server.MapPath("App_Data//csdl.mdb");
            OleDbConnection Olecon = new OleDbConnection(str);
            string chuoitruyvan = "select * from Sach";
            Olecon.Open();
            OleDbDataAdapter Oleda = new OleDbDataAdapter(chuoitruyvan, Olecon);
            Oleda.Fill(ds);
            Sach.DataSource = ds.Tables[0];
            Sach.DataBind();
            Olecon.Close();    
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                HienSach();
            }
           
        }
    Code:
     protected void Sach_ItemCommand(object source, DataListCommandEventArgs e)
        {
    if (e.CommandName == "chonmua")
                {
                    bool kt = false;
                    string masach = Sach.DataKeys[e.Item.ItemIndex].ToString();
                    dt = (DataTable)Session["cart"];     
                    string TenSP = LayTenSach(int.Parse(masach));
                    //s = Convert.ToInt16((e.Item.FindControl("txtsl") as TextBox).Text.ToString());   
                    if (dt.Rows.Count != 0)  
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            if (dr[0].ToString() == masach)
                            {
                                dr[3] = Convert.ToInt32(dr[3].ToString()) + 1; 
                                dr[4] = Convert.ToInt32(dr[2]) * Convert.ToInt32(dr[3]); 
                                kt = true;   //gan cho bien kt==true
                            }
                        }
                    }
                    if (kt == false)   
                    {
                        DataRow dr = dt.NewRow();  
                        dr[0] = Convert.ToString(masach);
                        dr[1] = LayTenSach(int.Parse(masach));
                        dr[2] = LayGiaSach(int.Parse(masach));
                        dr[3] = 1;
                        dr[4] = Convert.ToInt32(dr[2]) * Convert.ToInt32(dr[3]);
                        dt.Rows.Add(dr);   
                        Session["cart"] = dt;
                    }
                    //dt = (DataTable)Session["cart"];
                    GridView2.DataSource = dt;
                    GridView2.DataBind();            
            }
            
        }
    Global.asax
    Code:
    void Session_Start(object sender, EventArgs e) 
        {
            // Code that runs when a new session is started
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("ID", typeof(string)));
            dt.Columns.Add(new DataColumn("TenSanPham", typeof(string)));
            dt.Columns.Add(new DataColumn("GiaTien", typeof(float)));
            dt.Columns.Add(new DataColumn("SoLuong", typeof(Int32)));
            dt.Columns.Add(new DataColumn("TongTien", typeof(float)));
            Session["cart"] = dt;    
        }

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

    Do k có code nên k debug được, nhưng theo mình thì lỗi ở chỗ foreach. Ở đây sau khi gán biến kt = true rồi bạn break luôn ra khỏi vòng lặp

  3. #3
    Ngày gia nhập
    10 2011
    Bài viết
    18

    Trích dẫn Nguyên bản được gửi bởi locnt712 Xem bài viết
    Do k có code nên k debug được, nhưng theo mình thì lỗi ở chỗ foreach. Ở đây sau khi gán biến kt = true rồi bạn break luôn ra khỏi vòng lặp
    là sao bạn có thể nói rỏ hơn chút được không ?

  4. #4
    Ngày gia nhập
    10 2009
    Bài viết
    149

    Mình thấy thì chỗ này có thể bạn sai.
    Code:
    string masach = Sach.DataKeys[e.Item.ItemIndex].ToString();
    Nếu đã kiểm tra hàm SelectItemcommand của Datalist thì bạn lên lấy luôn giá trị CommandArgument chó nó là masach mà bạn muốn lấy tương ứng với sản phẩm đã click.
    Code:
    string strMaSach = e.CommandArgument.ToString();
    Và nhớ ở trên design thì chọn thuộc tính: CommanArgument của nó Eval("masach") nhé.
    Mình chỉ thấy mỗi đoạn đó là có vấn đề, còn logic ở dưới thì hoàn toàn đúng.
    Bạn thử lại xem sao.

  5. #5
    Ngày gia nhập
    07 2011
    Bài viết
    36

    hì, tức là code của bạn chỉ insert vào giỏ hàng khi kt = false, còn đối với true thì chưa có. Đối với kt = true thì bạn xóa bỏ dòng dữ liệu cũ rồi insert mới vào.
    Chúc bạn thành công

  6. #6
    Ngày gia nhập
    10 2009
    Bài viết
    149

    Mặc định Lỗi 1 sản phẩm hiện 3 hàng trong khi đặt sản phẩm vào giỏ hàng !

    Trích dẫn Nguyên bản được gửi bởi locnt712 Xem bài viết
    hì, tức là code của bạn chỉ insert vào giỏ hàng khi kt = false, còn đối với true thì chưa có. Đối với kt = true thì bạn xóa bỏ dòng dữ liệu cũ rồi insert mới vào.
    Chúc bạn thành công
    ^^' code của bạn ý theo logic thì là:
    Cho 1 biến kiemtra=false.
    Nếu lần đầu tiên mua thì sẽ cho KT=false.
    Nếu kiemtra=false thì sẽ tạo mới 1 list các row, tương ứng với bảng đã tạo ở file Global.ascx.
    Rồi sau đó là add vào table.

    Còn nếu là lần thứ 2 mua cùng 1 sản phẩm thì chỉ + thêm 1 sl mua, và cho Kiemtra=true để đỡ phải tạo thêm row mới.

    Cuối cùng thì chỉ là đổ ra gridview.

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

  1. Trả lời: 6
    Bài viết cuối: 31-07-2013, 07:51 PM
  2. Bài tập C xóa phần tử trùng nhau trong mảng 1 chiều để lại 1 phần tử
    Gửi bởi ronoa trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 06-01-2012, 10:46 PM
  3. Thủ tục loại bỏ các phần tử trùng nhau, giữ lại duy nhất 1 phần tử trong DSLK
    Gửi bởi mrtyoffline trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 02-03-2011, 10:27 PM
  4. Thuật toán trên C | Xóa phần tử trong dãy phần tử tăng dần?
    Gửi bởi quangphuit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 09-03-2010, 01:57 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