asp.net基于HashTable实现购物车的方法_实用技巧

本文实例讲述了asp.net基于HashTable实现购物车的方法。分享给大家供大家参考,具体如下:

//用户购买商品时
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();
}
#region 从购物车中删除一条商品信息
protected void MyGrid_RowCommand(object sender, GridViewCommandEventArgs e)
{
  Hashtable table;
  if (Session["car"] == null)
  {
   table = new Hashtable();
  }
  else
  {
   table = Session["car"] as Hashtable;
  }
  //如果点击删除按钮 则从购物车中移除该商品信息
  if (e.CommandName.ToLower() == "delete")
  {
   if (table.ContainsKey(e.CommandArgument))
   {
    //从HashTable中移除该商品的信息(商品编号) 键:为商品编号 值为:商品数量
    table.Remove(e.CommandArgument);
   }
   Msg.Text = (string)e.CommandArgument;
  }
  Session["car"] = table;
  //调用方法
  shoplist();
}
#endregion

希望本文所述对大家asp.net程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索asp.net
, 购物车
hashtable
,以便于您获取更多的相关知识。

时间: 2024-11-17 05:46:41

asp.net基于HashTable实现购物车的方法_实用技巧的相关文章

asp.net基于session实现购物车的方法_实用技巧

本文实例讲述了asp.net基于session实现购物车的方法.分享给大家供大家参考,具体如下: //加入购物车 protected void LinkButton2_Click(object sender, EventArgs e) { DataTable dt = null; //用户购买商品 如果 没有登录 则提示登录 if (Session["userName"] == null) { Common.MessageBox.ShowAndRedirectTo(this.Page,

ASP.NET缓存管理的几种方法_实用技巧

尽管缓存管理在Windows应用程序中已经不再是个问题,但在web环境下依然是个挑战.因为HTTP是一个无状态的协议并且web服务无法识别不同请求的用户.识别不同的请求究竟是哪个特定用户发出的,并且存储这些信息以便它在以后请求中能被重新使用,对我们来说非常重要.ASP.NET提供了很多特性用来在客户端和服务器端存储这些数据,但是有时我们会对"我们什么时候使用它们(哪个)"感到疑惑.在ASP.NET中,我们会遇到像Session,Application以及Cache这些对象,为了有效地在

asp.net实现access数据库分页的方法_实用技巧

asp.net操作access数据库是常见的数据库操作应用,本文就来实例讲解一下asp.net实现access数据库分页的方法.希望对大家的asp.net程序设计能有所帮助. 具体实例代码如下: <divclass="page"id="ctrlRecordPage"> 总<asp:LabelID="Zpage"runat="server"Text="1"></asp:Label

win2003服务器asp.net权限设置问题及解决方法_实用技巧

服务器asp.net权限设置问题及解决方法 本人服务器使用环境:WIN 2003 ASP.NET相对于ASP,设置权限方面有点不同,有一点儿设置错了都运行不到.在网上搜索到的都是很垃圾的答案,没有一个用得到的,下面是我自己设置并从中遇到的问题摸索后得到的经验,给大家分享. ASP.NET需要用到USERS组的权限,因为我也遇过很多次自己设置了权限之后发现网站运行不了,很郁闷.下面根据出现的问题,一点点解决,让你的ASP.NET运行起来.. 问题一: 未找到路径"C:\"的一部分. 说明

ASP.NET防范SQL注入式攻击的方法_实用技巧

一.什么是SQL注入式攻击?  SQL注入式攻击就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击.常见的SQL注入式攻击过程类如:  ⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码.  ⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或

asp.net清空Cookie的两种方法_实用技巧

asp.net清空Cookie的两种方法 第一种 Cookie.Expires=[DateTime]; Response.Cookies("UserName").Expires = 0; 第二种 Response.Cookies["admin"].Expires = DateTime.Now.AddDays(-1); 

asp.net实现C#绘制太极图的方法_实用技巧

本文实例讲述了asp.net实现C#绘制太极图的方法.分享给大家供大家参考.具体如下: 成品图如下所示: html页面: 注意设置: 复制代码 代码如下: ContentType="Image/Jpeg" 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TaiJiTu.aspx.cs" Inherits="TaiJiTu&qu

ASP.NET抓取网页内容的实现方法_实用技巧

本文实例讲述了ASP.NET抓取网页内容的实现方法.分享给大家供大家参考.具体实现方法如下: 一.ASP.NET 使用HttpWebRequest抓取网页内容 复制代码 代码如下: /// <summary>方法一:比较推荐  /// 用HttpWebRequest取得网页源码  /// 对于带BOM的网页很有效,不管是什么编码都能正确识别  /// </summary>  /// <param name="url">网页地址" </

ASP.Net下载大文件的实现方法_实用技巧

本文实例讲述了ASP.Net下载大文件的实现方法.分享给大家供大家参考.具体分析如下: 当我们的网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 1. 将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据. 2. 根据下载的文件类型来指定 Response.ContentType .(参考OSChina的这个网址可以找到大部分文件类型的对照表:http://tool.oschi