HashTable实现购物车

来源:互联网 发布:北京环鼎铭阳网络 编辑:程序博客网 时间:2024/06/06 02:48

http://blog.csdn.net/happy664618843/article/details/5890422


 用户购买商品时
if (e.CommandName.ToLower() == "buy")
        {
            //判断用户购物车是否为空 如果为空则分配一个
            Hashtable table;
            if (Session["car"] == null)
            {
                table = new Hashtable();
            }
            else
            {
                //用户购物车己存在 则取出数据
                table = Session["car"] as Hashtable;
            }
            //如果用户购物车中不包括该商品信息 则添加一个新商品
            if (!table.Contains(e.CommandArgument))
            {
                table.Add(e.CommandArgument, 1);//添加一个新商品 数量为1
            }
            else
            {
                //如果购物车己存在该商品信息 则将该商品的数量加1  根据HashTable的键获取相对应的值
                int count = Convert.ToInt32(table[e.CommandArgument].ToString());
                //给该商品数量加上1
                table[e.CommandArgument] = (count + 1);
            }
            //保存商品信息
            Session["car"] = table;
            Response.Redirect("shoppingcar.aspx");
        }
//商品信息列表
private void shoplist()
    {
        Hashtable table;
        if (Session["car"] == null)
        {
            table = new Hashtable();
        }
        else
        {
            table = Session["car"] as Hashtable;
        }
        if (table.Count == 0)
        {
            Image13.Visible = true;
            Msg.Visible = true;
            Msg.Text = "<b style="color:red" mce_style="color:red">您还没有购物呢?赶快购物吧!</b>";
        
        }
        string[] Arrkey = new string[table.Count];
        int[] ArrVal = new int[table.Count];
        table.Keys.CopyTo(Arrkey, 0);
   
        table.Values.CopyTo(ArrVal, 0);
        //定义字符串 形成 ('1,2,3')
        string Products = "('";
        int k = 0;
        for (int j = 0; j < Arrkey.Length; j++)
        {
          if(k>0)Products += "','"; k++;
          
          Products += Arrkey.GetValue(j).ToString();
        }
        Products += "')";
 
        DataSet ds = productbll.GetInfoByWhere(" pid in " + Products);
   
        DataTable Table1 = new DataTable();
        Table1 = ds.Tables[0];
   
        Table1.Columns.Add(new DataColumn("shuliang", System.Type.GetType("System.Int32")));
        //得到pid的值 并将它设置为Table1的主键
        DataColumn[] keys = { Table1.Columns["pid"]};
        Table1.PrimaryKey = keys;
       
        foreach (string key in table.Keys)
        {
            Table1.Rows.Find(key)["shuliang"] = table[key];//根据键获取值 商品的数量
        }
    
        Table1.Columns.Add(new DataColumn("zongjia", System.Type.GetType("System.Double"), "hotprice*shuliang"));
        for (int n = 0; n < Table1.Rows.Count; n++)
        {
            tPrice +=Convert.ToDouble(Table1.Rows[n]["zongjia"]);
        }
 
        Label1.Text = tPrice.ToString();
        Session["total"] = Label1.Text.ToString();
    
        MyGrid.DataSource = Table1.DefaultView;
        MyGrid.DataBind();
    }


  1. #region 从购物车中删除一条商品信息  
  2.     protected void MyGrid_RowCommand(object sender, GridViewCommandEventArgs e)  
  3.     {  
  4.         Hashtable table;  
  5.         if (Session["car"] == null)  
  6.         {  
  7.             table = new Hashtable();  
  8.         }  
  9.         else  
  10.         {  
  11.             table = Session["car"as Hashtable;  
  12.         }  
  13.         //如果点击删除按钮 则从购物车中移除该商品信息  
  14.         if (e.CommandName.ToLower() == "delete")  
  15.         {  
  16.             if (table.ContainsKey(e.CommandArgument))  
  17.             {  
  18.                 //从HashTable中移除该商品的信息(商品编号) 键:为商品编号 值为:商品数量  
  19.                 table.Remove(e.CommandArgument);  
  20.             }  
  21.             Msg.Text = (string)e.CommandArgument;  
  22.               
  23.         }  
  24.         Session["car"] = table;  
  25.         //调用方法  
  26.         shoplist();  
  27.     }  
  28.     #endregion 

0 0