zoukankan      html  css  js  c++  java
  • .net c#购物车模块分析

    http://blog.csdn.net/IHandler/article/details/5781662

      购物车的实现形式多样,在这里,我用到了虚拟表和sesson方法存储。
        首先创建一个商品的表,GridView控件绑定数据源。在GridView中添加一个列,控件为
    buttonfield.在GridView的RowCommand事件写代码:
             DataTable cart = new DataTable();//新建虚拟表
            if (Session["shoppingcart"] == null)
            {
                cart.Columns.Add("pname", typeof(string));//编辑表的列的属性
                cart.Columns.Add("pid", typeof(string));
                cart.Columns.Add("price", typeof(string));
                Session["shoppingcart"] = cart;
            }
            cart = (DataTable)Session["shoppingcart"];
            int n = Convert.ToInt32(e.CommandArgument);
          string p1 = GridView1.Rows[n].Cells[0].Text;//获得商品的数据
          string p2 = GridView1.Rows[n].Cells[1].Text;
          string p3 = GridView1.Rows[n].Cells[2].Text;
            DataRow rr = cart.NewRow();
            rr["pname"] = p1;
            rr["pid"] = p2;
            rr["price"] = p3;
            cart.Rows.Add(rr);//增加一条记录
            
            Session["shoppingcart"] = cart;
    购物车页面:添加一个未绑定数据源的GridView控件:一个显示总额的lable的控件。
    在页面加载事件中写代码:
    if (!this.IsPostBack){
            GridView1.DataSource = Session["shoppingcart"];
            GridView1.DataBind();
            double sum = 0.0;
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
               
             sum = sum + (double.Parse(GridView1.Rows.Cells[2].Text));
               
            }
            Label2.Text ="总计:"+ sum.ToString()+"元";
            }
    这样显示GridView控件了虚拟表的数据并且把总共的金额进行了加总。
    增添两个按钮控件:清空   提交订单
    清空按钮代码:

            Session.Remove("shoppingcart");
            GridView1.DataBind();
            Label2.Text = "总计:0元";
    提交订单:这里是提交给数据库,建一个订单表。
    事件代码:
            string name = Session["sa"].ToString();//获得提交用户的用户名
            double sum = 0.0;
            string p1="";
            string p2="";
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
             sum = sum + (double.Parse(GridView1.Rows
    .Cells[2].Text));
              p1 =p1+"、" + GridView1.Rows.Cells[0].Text;
              p2 =p2 +"、"+ GridView1.Rows
    .Cells[1].Text;
               }
            
            DataClasses3DataContext w = new DataClasses3DataContext();
            dingdan dan = new dingdan();
            dan.username = name;
            dan.dingdan1= p1+p2;
            dan.price = sum.ToString();
            dan.addtime = Convert.ToDateTime(DateTime.Now);
            w.dingdans.InsertOnSubmit(dan);
            w.SubmitChanges();
    点击清空:

    提交订单后,订单查看:

     这里的还很粗糙,代码很多需要完善。

    .Net用Cookie做购物车

    public class ShoppingCart
        {
           //保存购物车ID和数量到Cookie中

    //保存ID的格式:"1,32,43

    //下面是对应数量:"2,3,2"

    如ID=1,对应的数量就是2
           public void SaveCookieCart(int productId, int amount)
           {
            
               if (HttpContext.Current.Request["ShoppingCart"]== null)
               {
                   HttpCookie cookie = new HttpCookie("ShoppingCart");
                   DateTime dt = DateTime.Now;
                   TimeSpan ts = new TimeSpan(7, 0, 0, 0, 0);

                   cookie.Values.Add("ProductId",productId.ToString());
                   cookie.Values.Add("Amount", amount.ToString());
                   HttpContext.Current.Response.AppendCookie(cookie); cookie.Expires = dt.Add(ts);
               }
               else
               {
                   //用逗号隔开
                   HttpCookie cookie = HttpContext.Current.Request.Cookies["ShoppingCart"];
                   string[] ProductIdArray = cookie["ProductId"].ToString().Split(',');
                   string[] Amount = HttpContext.Current.Request.Cookies["ShoppingCart"]["Amount"].ToString().Split(',');
                   if (!ProductIdArray.Contains(productId.ToString()))
                   {
                       cookie.Values["ProductId"] = HttpContext.Current.Request.Cookies["ShoppingCart"]["ProductId"] + "," + productId;
                       cookie.Values["Amount"] = HttpContext.Current.Request.Cookies["ShoppingCart"]["Amount"] + "," + amount;
                    }  
                     HttpContext.Current.Response.AppendCookie(cookie);
                       DateTime dt = DateTime.Now;
                       TimeSpan ts = new TimeSpan(7, 0, 0, 0, 0);
                       cookie.Expires = dt.Add(ts);
                 
               }
           }
           //购物车数据源,也可以作为订单数据源
           public IList<Model.ShoppingCartProduct> GetIListShoppingCartFromCookie()
           {
               HttpCookie cookie = HttpContext.Current.Request.Cookies["ShoppingCart"];
               if (cookie != null)
               {
                   string[] ProductIdArray = cookie["ProductId"].ToString().Split(',');
                   string[] AmountArray = cookie["Amount"].ToString().Split(',');
                   int productId;
                   int amount;
                   IList<Model.ShoppingCartProduct> iList = new List<Model.ShoppingCartProduct>();
                   for (int i = ProductIdArray.Length-1; i >= 0; i--)
                   {
                       productId = Convert.ToInt32(ProductIdArray[i]);
                       amount = Convert.ToInt32(AmountArray[i]);
                       Model.ShoppingCartProduct shoppingCart = new SqlDAL.ShoppingCart().GetShoppingCartItem(productId,amount);
                       iList.Add(shoppingCart);           
                   }
                   return iList;
               }
               else{
                   return null;          
               }
           }
           //删除购物车中的某一项
           public void DeleteShoppingCartCookieItem(int productId)
           {
               HttpCookie cookie = HttpContext.Current.Request.Cookies["ShoppingCart"];
             
               if (cookie != null)
               {
                   string[] ProductIdArray = cookie["ProductId"].ToString().Split(',');
                   string[] AmountArray = cookie["Amount"].ToString().Split(',');
                                 StringBuilder productIdCookie=new StringBuilder();
                   StringBuilder amountCookie = new StringBuilder();
                   for (int i =0; i<ProductIdArray.Length; i++)
                   {
                       string productIdItem=ProductIdArray[i].Trim();
                       string amountItem=AmountArray[i].Trim();
                       //如果不相等就保存
                       if(productId.ToString()!=productIdItem){  
                          
                     
                       productIdCookie.Append(productIdItem+",");//追加完成
                       amountCookie.Append(amountItem+",");//追加完成
                       }
                   }
                     //更新删除Id后的COOKIE
                       cookie.Values["ProductId"] = productIdCookie.ToString().Substring(0, productIdCookie.Length-1);
                       cookie.Values["Amount"] =amountCookie.ToString().Substring(0,amountCookie.Length-1);
                       HttpContext.Current.Response.AppendCookie(cookie);
                       DateTime dt = DateTime.Now;
                       TimeSpan ts = new TimeSpan(7, 0, 0, 0, 0);
                       cookie.Expires = dt.Add(ts);

               }
           }
           //清空购物车
           public void ClearCookie()
           {

               if (HttpContext.Current.Request["ShoppingCart"] != null)
               {
                   HttpCookie cookie = new HttpCookie("ShoppingCart");
                   DateTime dt = DateTime.Now;
                   TimeSpan ts = new TimeSpan(0, 0, 0, 0, 0);
                   cookie.Values.Add("ProductId", "");
                   cookie.Values.Add("Amount", "");
                   HttpContext.Current.Response.AppendCookie(cookie); cookie.Expires = dt.Add(ts);
               }

           }
           //修改购物车某商品的数量
           public void ModifyAmount(int productId,int amount)
           {
               HttpCookie cookie = HttpContext.Current.Request.Cookies["ShoppingCart"];
               if (cookie != null)
               {
                   string[] ProductIdArray = cookie["ProductId"].ToString().Split(',');
                   string[] AmountArray = cookie["Amount"].ToString().Split(',');
                 
                   StringBuilder productIdCookie = new StringBuilder();
                   StringBuilder amountCookie = new StringBuilder();
                   for (int i = 0; i < ProductIdArray.Length; i++)
                   {
                     
                       //如果不相等就保存
                       if (productId.ToString()==ProductIdArray[i].ToString())
                       {


                           productIdCookie.Append(ProductIdArray[i]+ ",");
                           amountCookie.Append(amount + ",");//修改操作
                       }
                       else
                       {
                           productIdCookie.Append(ProductIdArray[i] + ",");//追加完成
                           amountCookie.Append(AmountArray[i] + ",");//追加完成
                       }
                   }
                   //更新删除Id后的COOKIE
                   cookie.Values["ProductId"] = productIdCookie.ToString().Substring(0, productIdCookie.Length - 1);
                   cookie.Values["Amount"] = amountCookie.ToString().Substring(0, amountCookie.Length - 1);//删除最后的逗号
                   HttpContext.Current.Response.AppendCookie(cookie);
                   DateTime dt = DateTime.Now;
                   TimeSpan ts = new TimeSpan(7, 0, 0, 0, 0);
                   cookie.Expires = dt.Add(ts);
             
               }
              
           }


        }
    }

    .netc#购物车 代码系列3
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Web.UI.HtmlControls; 
    using System.Data; 
    using DAO; 
    using System.Drawing; 
    public partial class ShoppingCart : System.Web.UI.Page 

        //整型变量,用于存储总金额  
        private Int32 Total = 0; 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            if (!IsPostBack) 
            { 
                BindCartList(); 
            } 
        } 
        private void BindCartList() 
        { 
            DataTable dt = new DataTable(); 
            //如果Session变量存在,则直接获取  
            if (Session["Cart"] != null) 
            { 
                dt = (DataTable)Session["Cart"]; 
            } 
            else//如果Session变量不存在,创建存储数据的表结构  
            { 
                dt.Columns.Add(new DataColumn("ID", typeof(Int32))); 
                dt.Columns.Add(new DataColumn("ProductNo", typeof(String))); 
                dt.Columns.Add(new DataColumn("ProductName", typeof(String))); 
                dt.Columns.Add(new DataColumn("BuyPrice", typeof(String))); 
                dt.Columns.Add(new DataColumn("Amount", typeof(Int32))); 
            } 
            //ID或ProductNo不为null  
            //则表示选中一件商品添加到购物车  
            if (ID != null) 
            { 
                //先判断购物车中是否已经存在该商品  
                Boolean IsExist = false; 
                foreach (DataRow dr in dt.Rows) 
                { 
                    if (dr["ProductNo"].ToString() == ProductNo) 
                    { 
                        IsExist = true; 
                        break; 
                    } 
                } 
                //如果购物车中存在该商品,则提示客户  
                //该商品不会被重复添加到购物车  
                if (IsExist) 
                { 
                    ScriptManager.RegisterStartupScript( 
                        this, typeof(Page), "alertExist", "alert('您选择的商品(编号:" + ProductNo + ")已在购物车存在!')", true); 
                } 
                else//如果购物车中不存在该商品,则添加到购物车  
                { 
                    SqlHelper helper = new SqlHelper(); 
                    DataTable dtRow = helper.FillDataTable( 
                        String.Format("Select * From Products Where ID={0}", ID.ToString())); 
                    dt.Rows.Add(new object[]{ 
                        Convert.ToInt32(ID.ToString()), 
                        dtRow.Rows[0]["ProductNo"].ToString(), 
                        dtRow.Rows[0]["ProductName"].ToString(), 
                        Convert.ToInt32(dtRow.Rows[0]["BuyPrice"].ToString()), 
                        1}); 
                } 
            } 
            gvCart.DataSource = dt; 
            gvCart.DataBind(); 
            Session["Cart"] = dt; 
        } 
        protected void gvCart_RowDataBound(object sender, GridViewRowEventArgs e) 
        { 
            if (e.Row.RowType == DataControlRowType.DataRow) 
            { 
                //GridView行的加亮显示功能  
                e.Row.Attributes.Add("onmouseover", "b=this.style.backgroundColor;this.style.backgroundColor='#E1ECEE'"); 
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=b"); 
                //给+号图片和-号图片添加客户端click事件  
                //用JavaScript实现数量的+1和-1  
                TextBox tb = (TextBox)e.Row.FindControl("txtAmount"); 
                ((HtmlImage)e.Row.FindControl("imgReduce")).Attributes.Add("onclick", "Reduce(" + tb.ClientID + ")"); 
                ((HtmlImage)e.Row.FindControl("imgPlus")).Attributes.Add("onclick", "Plus(" + tb.ClientID + ")"); 
                 
                //根据商品单价和数量计算购物车中商品的总金额  
                DataRowView drv = (DataRowView)e.Row.DataItem; 
                Total += Int32.Parse(drv["BuyPrice"].ToString())*Int32.Parse(tb.Text); 
            } 
            if (e.Row.RowType == DataControlRowType.Footer) 
            { 
                //将总金额显示在金额一列对应的Footer单元格  
                e.Row.Cells[1].Text = "金额总计:"; 
                e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Right; 
                e.Row.Cells[2].Text = Total.ToString("c2"); 
                e.Row.Cells[2].ForeColor = Color.Red; 
            } 
        } 
        protected void gvCart_RowDeleting(object sender, GridViewDeleteEventArgs e) 
        { 
            //点击删除时从DataTable中删除对应的数据行  
            if (Session["Cart"] != null) 
            { 
                DataTable dt = (DataTable)Session["Cart"]; 
                dt.Rows.RemoveAt(e.RowIndex); 
                dt.AcceptChanges(); 
                Session["Cart"] = dt; 
                Response.Redirect("ShoppingCart.aspx"); 
            } 
        } 
        protected void imgbtnTotal_Click(object sender, ImageClickEventArgs e) 
        { 
            //遍历GridView,根据每行的文本框中的值  
            //修改DataTable中对应行中数量一列的值  
            if (Session["Cart"] != null) 
            { 
                DataTable dt = (DataTable)Session["Cart"]; 
                for (int i = 0; i < gvCart.Rows.Count; i++) 
                { 
                    dt.Rows[i]["Amount"] = ((TextBox)gvCart.Rows[i].FindControl("txtAmount")).Text; 
                } 
                dt.AcceptChanges(); 
                Session["Cart"] = dt; 
                Response.Redirect("ShoppingCart.aspx"); 
            } 
        } 
        #region 属性  
        /// <summary>  
        /// get URL参数ID的值,定义为Nullable<Int32>类型  
        /// </summary>  
        private Int32? ID 
        { 
            get 
            { 
                try 
                { 
                    return Int32.Parse(Request.QueryString["ID"]); 
                } 
                catch 
                { 
                    return null; 
                } 
            } 
        } 
        /// <summary>  
        /// get URL参数ProductNo的值  
        /// </summary>  
        private String ProductNo 
        { 
            get 
            { 
               return Request.QueryString["ProductNo"]; 
            } 
        } 
        #endregion  

  • 相关阅读:
    推荐]历史上最强的绕口令
    超级经理人的关系学:打造黄金人脉
    个人创业的难点和解决之道
    你的人脉关系中不可缺少的十种人[推荐]
    哲理短文一则:揭示最好的成功法则
    [经验交流]太精彩,太有启发性了(经典经典) 转
    权力领域是人才浪费的致命区域
    2006创业完全手册
    爱你我的宝贝(转)
    最远的你是我最近的爱
  • 原文地址:https://www.cnblogs.com/yeye518/p/2231630.html
Copyright © 2011-2022 走看看