购物车的两种实现方式

 1:第一种方式:用Datatable

BuyPro(1, Request.QueryString["id"].ToString());

 public string BuyPro(int number, string ProductCode)
        {
             if (Session["Cart"] == null)
            {
                this.BuildCart(number, ProductCode);
            }
            else
            {
                DataTable cart = Session["Cart"] as DataTable;
                if (this.Existproduct(cart, number, ProductCode))
                {
                    this.BuildSession(cart, number, ProductCode);
                }
            }
            return GetCartPro();
        }

private void BuildCart(int number, string ProductCode)
        {
            DataTable cart = new DataTable();
            cart.Columns.Add("ProductCode");
            cart.Columns.Add("ProductName");
            cart.Columns.Add("ProductDes");
            cart.Columns.Add("Number");
            cart.Columns.Add("UnitPrice");
            this.BuildSession(cart, number, ProductCode);
        }
        /// <summary>
        /// 添加新产品
        /// </summary>
        /// <param name="cart"></param>
             private void BuildSession(DataTable cart, int number, string ProductCode)
        {
            DataRow dr = cart.NewRow();
            model_pro = dal_pro.GetModel(Convert.ToInt32(ProductCode));

            dr["ProductCode"] = model_pro.id;// ViewState["ProductCode"].ToString();
            dr["ProductName"] = model_pro.ProName;
            dr["Number"] = number;
            dr["UnitPrice"] = model_pro.Mallprice;
            dr["ProductDes"] = "";// model_pro.ProductDes;
            cart.Rows.Add(dr);

            Session["Cart"] = cart;
        }


        /// <summary>
        /// 产品已经存在
        /// </summary>
        /// <param name="cart"></param>

        /// <returns></returns>

        public bool Existproduct(DataTable cart, int number, string ProductCode)
        {
            Boolean bo = false;
            foreach (DataRow dr in cart.Rows)
            {
                if (dr["ProductCode"].ToString().Equals(ProductCode))
                {
                    dr["Number"] = Convert.ToInt32(dr["Number"]) + number;
                    dr["Number"] = Convert.ToInt32(dr["Number"]) > 100 ? 100 : dr["Number"];
                    Session["Cart"] = cart;
                    //Response.Redirect("Cart.aspx");
                    bo = false;
                    return bo;
                }
                else
                {
                    bo = true;
                }
            }
            return bo;
        }
        protected string GetCartPro()
        {
            DataTable cart = (DataTable)Session["Cart"];

            double Total = 0;
            if (cart != null)
            {
                foreach (DataRow dr in cart.Rows)
                {

                    Total += Convert.ToDouble(dr["UnitPrice"].ToString()) * Convert.ToDouble(dr["Number"].ToString());

                }
                return "购物车已有宝贝<font style='color:red;font-weight:bold'> " + cart.Rows.Count + "</font>种,总价:¥<font style='color:red;font-weight:bold'>" + Total + "</font>";
            }
            // Maunite.Common.MessageBox.Show(this, Total.ToString());
            return "购物车目前为空,总价:0";

        }

取出购物车信息
 private void BindGridView()
        {

            DataTable cart = Session["cart"] as DataTable;
            Mycart.DataSource = cart;
            Mycart.DataBind();
            if (Session["cart"] != null)
            {
                Label5.Text = "您以选购的商品";
                TotalPrice(cart);
                BindTuijian();
            }
            else
            {
                Label5.Text = "<font style='color:red'>您的购物车没有商品</font>";
                TuijianDiv.Visible = false;
                this.ltrSalary.Text = "0";
                this.labIntegral.Text = "0";
            }

        }

2:第二种实现方式:用Hashtable

Hashtable hash;
            if (Session["Car"] == null)
            {
                //如果用户没有分配购物车
                hash = new Hashtable();         //新生成一个
                //  hash.Add(e.CommandArgument, 1); //添加一个商品
                // Session["Cart"] = hash;     //分配给用户
            }
            else
            {
                //用户已经有购物车
                hash = (Hashtable)Session["Car"];//得到购物车的hash表
            }
            if (!hash.Contains(e.CommandArgument))//购物车中已有此商品,商品数量加1
            {
                hash.Add(e.CommandArgument, 1);//如果没有此商品,则新添加一个项

            }
            else
            {
                int count = Convert.ToInt32(hash[e.CommandArgument].ToString());//得到该商品的数量
                hash[e.CommandArgument] = (count + 1);//商品数量加1
            }

            Session["Car"] = hash;

取出购物车信息

 protected void shoplist()
    {
        Hashtable Hash;
        if (Session["car"] == null)
        {
            Hash = new Hashtable();
        }
        else
        {
            Hash = (Hashtable)Session["car"];
        }
        if (Hash.Count == 0)
        {
                      Msg.Text = "您还没有购物呢?赶快购物吧!";
        }

        string[] ArrKey = new string[Hash.Count];
        int[] ArrVal = new int[Hash.Count];
        string Products = "('";
        Hash.Keys.CopyTo(ArrKey, 0);
        Hash.Values.CopyTo(ArrVal, 0);
        int k = 0;
        for (int j = 0; j < ArrKey.Length; j++)
        {
            if (k > 0) Products += "','"; k++;
            Products += ArrKey.GetValue(j).ToString();
        }
        Products += "')";
     
        SqlConnection conn = new SqlConnection(Class1.lianjie());

        conn.Open();
        string mysql = "select * from product where pid in" + Products;
        SqlCommand cmd = new SqlCommand(mysql,conn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds, "product");
        DataTable Table1 = new DataTable();
        Table1 = ds.Tables["product"];
        Table1.Columns.Add(new DataColumn("shuliang", System.Type.GetType("System.Int32")));
     
        DataColumn[] Keys ={ Table1.Columns["pid"] };
        Table1.PrimaryKey = Keys;
        foreach (string X in Hash.Keys)
        {
            Table1.Rows.Find(X)["shuliang"] = Hash[X];
           
        }
        Table1.Columns.Add(new DataColumn("zongjia", System.Type.GetType("System.Double"), "hotprice*shuliang"));
       
     
        for (int I = 0; I < Table1.Rows.Count; I++)
        {
            TtlPrice += Convert.ToDouble(Table1.Rows[I]["zongjia"]);
          
        }
     
        Label1.Text = TtlPrice.ToString();
        Session["total"] = Label1.Text.ToString();
        MyGrid.DataSource = Table1.DefaultView;
        MyGrid.DataBind();

    }

转载于:https://www.cnblogs.com/zhang9418hn/archive/2011/03/23/1992961.html

特别说明请注意: 根许多网友反应, using Maticsoft.Functions; 这些代码看不懂 其实Functions 这个dll是我定义常用的函数类,如果需要跟我联系索取http://sql8.net 下面有我的群号, 其中 ArtsShop.Model.Arts_Product _p = new ArtsShop.Model.Arts_Product(); ArtsShop.BLL.Arts_Product p = new ArtsShop.BLL.Arts_Product(); _p = p.GetModel(id); 这是我的商品信息的类,三层结构,这个在用时你们只能换成你们自己的,这些代码完全可以删除, 比如 MyDr[1] = _p.Title; 用来读取商品名的,你们可以改MyDr[1] = dr["productname"].ToString();就行了, AddToCart.aspx页面代码 无标题页 <asp:TextBox ID="TextBox1" runat="server" Text='' Width="44px"> <asp:Label ID="Label1" runat="server" Text=''> 保存 取消 编辑 继续购物 清空购物车 下订单 AddToCart.aspx.cs页面代码 using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Maticsoft.Functions;public partial class AddToCart : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { int ProID; HttpCookie cookie; bool Tempbl = false; string Tempstr; if (!Page.IsPostBack) { if (!object.Equals(Request.QueryString["id"], null)) { ProID = int.Parse(Request.QueryString["id"]); //创购物车cookie yxy .//sql8.net if (object.Equals(Request.Cookies["ztbscart"], null)) cookie = new HttpCookie("ztbscart"); else cookie = Request.Cookies["ztbscart"]; //判断是否已存在于购物车内 yxy // sql8.net for (int i = 0; i < cookie.Values.Keys.Count; i++) { if (!object.Equals(cookie.Values.Keys[i], null)) { Tempstr = cookie.Values.AllKeys[i].ToString(); if (Tempstr.Trim() != "") { if (ProID == int.Parse(cookie.Values.AllKeys[i])) { Tempbl = true; break; } } } } //不未购买过则加入购物车 yxy //sql8.net if (!Tempbl) cookie.Values.Add(ProID.ToString(), "1"); else { } TimeSpan ts = new TimeSpan(0, 0, 10, 0); cookie.Expires = DateTime.Now + ts; Response.AppendCookie(cookie); } BindGrid(); } } //绑定数据 yxy //sql8.net private void BindGrid() { DataTable MyDt; DataRow MyDr; string str = ""; MyDt = new DataTable(); MyDt.Columns.Add(new DataColumn("id", str.GetType())); MyDt.Columns.Add(new DataColumn("Title", str.GetType())); MyDt.Columns.Add(new DataColumn("Num", str.GetType())); MyDt.Columns.Add(new DataColumn("Price", str.GetType())); MyDt.Columns.Add(new DataColumn("Discount", str.GetType())); MyDt.Columns.Add(new DataColumn("Vipprice", str.GetType())); MyDt.Columns.Add(new DataColumn("Totle", str.GetType())); if (!object.Equals(Request.Cookies["ztbscart"], null)) { HttpCookie cookie = Request.Cookies["ztbscart"]; double Totle; //Response.Write("|" + Request.Cookies["ztbscart"].Values.Keys[1].ToString() + "|"); //Response.End(); for (int i = 0; i < cookie.Values.Keys.Count; i++) { int id; MyDr = MyDt.NewRow(); if (cookie.Values.AllKeys[i] != "" && cookie.Values[i] != "") { id = int.Parse(cookie.Values.AllKeys[i].ToString()); ArtsShop.Model.Arts_Product _p = new ArtsShop.Model.Arts_Product(); ArtsShop.BLL.Arts_Product p = new ArtsShop.BLL.Arts_Product(); _p = p.GetModel(id); MyDr[0] = id; MyDr[1] = _p.Title; MyDr[2] = cookie.Values[i]; MyDr[3] = _p.Price; MyDr[4] = _p.Discount; MyDr[5] = _p.Vipprice1; Totle = double.Parse(MyDr[2].ToString()) * double.Parse(MyDr[5].ToString()); MyDr[6] = Totle; MyDt.Rows.Add(MyDr); } } GridView1.DataSource = MyDt.DefaultView; GridView1.DataBind(); } } protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { //编辑某行数量 yxy //sql8.net GridView1.EditIndex = e.NewEditIndex; BindGrid(); } protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { //取消更新 yxy //sql8.net GridView1.EditIndex = -1; BindGrid(); } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { //更新数量 yxy //sql8.net string num; TextBox tempbx = new TextBox(); Label templb = new Label(); tempbx = (TextBox)(GridView1.Rows[e.RowIndex].Cells[6]).Controls[1]; num = tempbx.Text.ToString(); HttpCookie cookie = new HttpCookie("ztbscart"); for (int i = 0; i < GridView1.Rows.Count; i++) { string id; string tempnum; id = GridView1.Rows[i].Cells[1].Text.ToString(); if (e.RowIndex == i) tempnum = num; else { templb = (Label)(GridView1.Rows[i].Cells[6]).Controls[1]; tempnum = templb.Text.ToString(); } if (tempnum.Trim() == "") tempnum = "0"; //Response.Write("ID:"+id.ToString() + "Num:"+tempnum+":"+i+"");//测试用途 yxy//sql8.net cookie.Values.Add(id, tempnum); } //Response.End(); TimeSpan ts = new TimeSpan(0, 0, 10, 0); cookie.Expires = DateTime.Now + ts; Response.AppendCookie(cookie); GridView1.EditIndex = -1; Message.GoTo("AddToCart.aspx"); } protected void LinkButton4_Click(object sender, EventArgs e) { //继续购物 yxy //sql8.net Message.WebClose(); } protected void LinkButton3_Click(object sender, EventArgs e) { //清空购物车 yxy //sql8.net CheckBox tempcb = new CheckBox(); HttpCookie cookie = new HttpCookie("ztbscart"); Label templb = new Label(); for (int i = 0; i < GridView1.Rows.Count; i++) { tempcb = (CheckBox)(GridView1.Rows[i].Cells[0]).Controls[1]; if (!tempcb.Checked) { string id; string tempnum; id = GridView1.Rows[i].Cells[1].Text.ToString(); templb = (Label)(GridView1.Rows[i].Cells[6]).Controls[1]; tempnum = templb.Text.ToString(); if (tempnum.Trim() == "") tempnum = "0"; //Response.Write("ID:"+id.ToString() + "Num:"+tempnum+":"+i+"");//测试用途 yxy//sql8.net cookie.Values.Add(id, tempnum); } } TimeSpan ts = new TimeSpan(0, 0, 10, 0); cookie.Expires = DateTime.Now + ts; Response.AppendCookie(cookie); Message.GoTo("AddToCart.aspx"); } protected void CheckAll_CheckedChanged(object sender, EventArgs e) { //全选事件 yxy //sql8.net CheckBox tempcb = new CheckBox(); bool tempbl; tempcb = (CheckBox)(GridView1.HeaderRow.Cells[0]).Controls[1]; tempbl = tempcb.Checked; for (int i = 0; i < GridView1.Rows.Count; i++) { tempcb = (CheckBox)(GridView1.Rows[i].Cells[0]).Controls[1]; tempcb.Checked = tempbl; } } } _________________________________________________________________________ 如转载请注明原出处 www.sql8.net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值