ASP.NET购物车实现过程详解

1、 将test数据库附加到数据库管理系统中;数据库中的book_info包含下列数据:

2、 新建一个网站,将images文件夹复制到网站中;
3、 在Default.aspx中,通过DataList控件展示数据库中的所有数据,以行为主序,每行3列,单击购买按钮时,将商品的ID和数量保存到HashTable中,并将HashTable放置到Session中。

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
  {
    string id = e.CommandArgument.ToString();
    Hashtable ht;
    if (Session["shopcar"] == null)
    {
      ht = new Hashtable();
      ht.Add(id, 1);
      Session["shopcar"] = ht;
    }
    else
    {
      ht = (Hashtable)Session["shopcar"];
      if (ht.Contains(id))
      {
        int count = int.Parse(ht[id].ToString());
        ht[id] = count + 1;
        Session["shopcar"] = ht;
        Response.Write(count + 1);
      }
      else
      {
        ht.Add(id, 1);
        Session["shopcar"] = ht;
      }
    }
  } 

4、 在Default.aspx中添加一个超链接,链接到shopcart.aspx,在shopcart.aspx中显示用户购买的商品信息。
提示:

A、在shopcart中先定义下列变量:

Hashtable ht;
  DataTable dt;
  string connstring=@"DataSource=.\SQLEXPRESS;Initial Catalog=test;Integrated Security=True";
  SqlConnection conn;
  SqlCommand cmd;
 SqlDataReader sdr;

B、页面中添加一个GridView。
C、在page_load中,将dt实例化,建立各列。

protected void Page_Load(object sender, EventArgs e)
  {
    dt = new DataTable();
    DataColumn col = new DataColumn();
    col.ColumnName= "id";
    col.DataType =System.Type.GetType("System.String");
    dt.Columns.Add(col);
    col = new DataColumn();
    col.ColumnName= "name";
    col.DataType =System.Type.GetType("System.String");
    dt.Columns.Add(col);
    col = new DataColumn();
    col.ColumnName= "Num";
    col.DataType =System.Type.GetType("System.Int32");
    dt.Columns.Add(col);
    col = new DataColumn();
    col.ColumnName= "price";
    col.DataType =System.Type.GetType("System.Single");
    dt.Columns.Add(col);
    col = new DataColumn();
    col.ColumnName= "Total";
    col.DataType =System.Type.GetType("System.Single");
    dt.Columns.Add(col);
    if (!IsPostBack)
    {
      Bind();
    }
  }

  public void Bind()
  {

    if (Session["shopcar"] == null)
    {
      Response.Write("<script>if(confirm('你没有登录')window.location='Default15.aspx';else window.close();</script>");
    }
    else
    {
      ht = (Hashtable)Session["shopcar"];
      foreach (object item in ht.Keys)
      {
        string id = item.ToString();
        int num = int.Parse(ht[item].ToString());
        string sql = "selectbook_name,price from book_info where book_id='" + id + "'";
        conn = new SqlConnection(connstring);
        cmd = new SqlCommand(sql, conn);
        conn.Open();
        sdr =cmd.ExecuteReader();
        if (sdr.HasRows)
        {
          sdr.Read();
          DataRow row = dt.NewRow();
          row["id"] = id;
          row["Num"] = num;
          row["name"] = sdr.GetString(0);
          row["price"] =float.Parse(sdr[1].ToString());
          row["total"] =num*(float.Parse(sdr[1].ToString()));
          dt.Rows.Add(row);
        }
        sdr.Close();
        conn.Close();

      }
      GridView1.DataSource = dt.DefaultView;
      GridView1.DataBind();
    }
}

D、这时可以看到用户购买的商品,但不能修改数量,也不能删除。
E、添加修改数量,删除商品功能,在aspx页面中定义GridView中的各列:

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
     <Columns>
       <asp:BoundField DataField="id" HeaderText="ID" />
       <asp:BoundField DataField="name" HeaderText="名称" />
       <asp:BoundField DataField="price" HeaderText="价格" />
       <asp:TemplateField>
        <ItemTemplate>
         <asp:TextBox runat="server" ID="textbox1" Text='<%# Eval("Num") %>'
            ontextchanged="textbox1_TextChanged" AutoPostBack="True" ></asp:TextBox>
        </ItemTemplate>
       </asp:TemplateField>
      <asp:BoundField DataField="total" HeaderText="总计" />
      <asp:TemplateField>
       <ItemTemplate>
        <asp:Button runat="server" ID="button1" CommandArgument='<%# Eval("id") %>'
           Text="删除" onclick="button1_Click" />

       </ItemTemplate>

      </asp:TemplateField>
     </Columns>
    </asp:GridView>

F、为GridView中的文本框添加TextChanged事件:

protected void textbox1_TextChanged(object sender, EventArgs e)
  {

    Hashtable ht =(Hashtable)Session["shopcar"];
    if (ht == null) return;
    for (int i = 0; i < GridView1.Rows.Count;i++)
    {
      string id =GridView1.Rows[i].Cells[0].Text.ToString();
      Response.Write(id);
      string num = ((TextBox)GridView1.Rows[i].FindControl("textbox1")).Text;
      Response.Write("  "+num+"<br />");
      ht[id] = num;
    }
    Session["shopcar"] = ht;
    Bind();

  }

G、为按钮添加单击事件:

protected void button1_Click(object sender, EventArgs e)
  {
    string id = ((Button)sender).CommandArgument;
    Hashtable ht = (Hashtable)Session["shopcar"];
    if (ht == null) return;
    ht.Remove(id);
    Bind();
}

购物车代码:showcart.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Data;
using System.Data.SqlClient; 

public partial class shopcart : System.Web.UI.Page
{
  Hashtable ht;
  DataTable dt;
  string connstr = "Data Source=.\\SQLEXPRESS;AttachDbFilename=F:

\\test.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
  SqlConnection conn;
  SqlCommand cmd;
  SqlDataReader sdr;
  protected void Page_Load(object sender, EventArgs e)
  {
    dt = new DataTable();
    DataColumn col = new DataColumn();
    col.ColumnName = "id";
    col.DataType = System.Type.GetType("System.String");
    dt.Columns.Add(col);
    col = new DataColumn();
    col.ColumnName = "name";
    col.DataType = System.Type.GetType("System.String");
    dt.Columns.Add(col);
    col = new DataColumn();
    col.ColumnName = "Num";
    col.DataType = System.Type.GetType("System.Int32");
    dt.Columns.Add(col);
    col = new DataColumn();
    col.ColumnName = "price";
    col.DataType = System.Type.GetType("System.Single");
    dt.Columns.Add(col);
    col = new DataColumn();
    col.ColumnName = "Total";
    col.DataType = System.Type.GetType("System.Single");
    dt.Columns.Add(col); 

    if (!IsPostBack)
    {
      Bind();
    } 

  } 

  public void Bind()
  {
    if (Session["shopcar"] == null)
    {
      Response.Write("<script>if(confirm('你没有登录')window.location='Default.aspx';else window.close();</script>");
    }
    else
    {
      ht = (Hashtable)Session["shopcar"];
      foreach (object item in ht.Keys)
      {
        string id = item.ToString(); 

        int num = int.Parse((ht[item].ToString()));
        string sql = "select book_name,price from book_info where book_id='" + id + "'";
        conn = new SqlConnection(connstr); 

        cmd = new SqlCommand(sql, conn);
        conn.Open(); 

        sdr = cmd.ExecuteReader();
        if (sdr.HasRows)
        {
          sdr.Read();
          DataRow row = dt.NewRow();
          row["id"] = id;
          row["Num"] = num;
          row["name"] = sdr.GetString(0);
          row["price"] = float.Parse(sdr[1].ToString());
          row["total"] = num * (float.Parse(sdr[1].ToString()));
          dt.Rows.Add(row); 

        }
        sdr.Close();
        conn.Close();
      }
    }
    GridView1.DataSource = dt.DefaultView;
    GridView1.DataBind(); 

  }
  protected void textbox1_TextChanged(object sender, EventArgs e)
  {
    Hashtable ht = (Hashtable)Session["shopcar"];
    if (ht == null) return;
    for (int i = 0; i < GridView1.Rows.Count; i++)
    {
      string id = GridView1.Rows[i].Cells[0].Text.ToString();
      Response.Write(id);
      string num = ((TextBox)GridView1.Rows[i].FindControl("textbox1")).Text;
      Response.Write("  " + num + "<br />");
      ht[id] = num;
    }
    Session["shopcar"] = ht;
    Bind(); 

  }
  protected void button1_Click(object sender, EventArgs e)
  {
    string id = ((Button)sender).CommandArgument;
    Hashtable ht = (Hashtable)Session["shopcar"];
    if (ht == null) return;
    ht.Remove(id);
    Bind(); 

  }
}

制作一个简单的购物车就是这么简单,大家可以按照我的思路进行创作,在此基础上在添加一些功能。

(0)

相关推荐

  • asp.net Hashtable 遍历写法

    复制代码 代码如下: foreach (DictionaryEntry de in h)//h为Hashtable { Response.Write(de.Key + "<br />"); }

  • asp.net 购物车的实现浅析

    该购物车的功能如下: . 通过ajax实现添加和删除车上的物品. . 删除的物品会显示出来,可以重新添加到购物车. . 嗯...没有了,具体大家接着看吧. 购物车的结构我打算用一个table来展示,在UserControl里使用ListView展现购物车的物品(因为比拼接字符串要容易维护的多).具体代码如下(ShopCartTest.ascx): 复制代码 代码如下: <asp:ListView ID="ListView1" runat="server">

  • asp.net 实现自定义Hashtable (.net)

    需要两个类 1.typeFiles.cs 复制代码 代码如下: using System; namespace Model { /// <summary> /// typeFiles 的摘要说明. /// </summary> public class typeFiles { private object _Fkey; private object _Fvalue1; private object _Fvalue2; public object Fkey { get { retur

  • asp.net基于HashTable实现购物车的方法

    本文实例讲述了asp.net基于HashTable实现购物车的方法.分享给大家供大家参考,具体如下: //用户购买商品时 if (e.CommandName.ToLower() == "buy") { //判断用户购物车是否为空 如果为空则分配一个 Hashtable table; if (Session["car"] == null) { table = new Hashtable(); } else { //用户购物车己存在 则取出数据 table = Sess

  • 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 购物车实现详细代码

    <%@ Page language="c#" Codebehind="shoppingcart.aspx.cs" AutoEventWireup="false" Inherits="myshop.shoppingcart" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML> <

  • ASP.NET购物车实现过程详解

    1. 将test数据库附加到数据库管理系统中:数据库中的book_info包含下列数据: 2. 新建一个网站,将images文件夹复制到网站中: 3. 在Default.aspx中,通过DataList控件展示数据库中的所有数据,以行为主序,每行3列,单击购买按钮时,将商品的ID和数量保存到HashTable中,并将HashTable放置到Session中. protected void DataList1_ItemCommand(object source, DataListCommandEv

  • 树莓派ASP.NET环境配置过程详解

    目录 在树莓派上部署ASP.NET环境(树莓派做ASP.NET项目服务器),之后Windows上开发的ASP.NET项目可以部署在树莓派上. 在树莓派上部署ASP.NET环境(树莓派做ASP.NET项目服务器),之后Windows上开发的ASP.NET项目可以部署在树莓派上.配置过程如下: 前言:本篇文章内容是根据mono官网上查阅的配置教程所写,当时做期末课设的时候一边查翻译一边配置(好像当时访问这个网站还要禾斗学上网),最终亲身试验可以用,随后在word上做了配置过程笔记,现在搬上来. mo

  • Python基于数列实现购物车程序过程详解

    要求 1.启动程序后让用户输入余额,并打印商品列表 2.用户通过输入编号购买商品 3.用户选择商品购买后,根据余额判断成功或者失败,给出对应提示 4.可以随时退出,退出后打印账号余额以及购买的商品列表 构思 1.首先,用户余额需要进行存储,用户购买的物品需要进行存储在数组中 2.用户购买成功后,将购买的物品放入物品集合,并用总金额减去余额 3.如果失败,给出失败提示,并打印余额 4.用户选择继续后,无论成功失败,都可以继续购买 代码 # 用户输入工资 balance = int(input("P

  • asp 内置对象 Application 详解

    asp内置对象 Application 详解  在 ASP 的内建对象中除了用于发送.接收和处理数据的对象外,还有一些非常实用的代表 Active Server 应用程序和单个用户信息的对象.  让我们先来看看 Application 对象.在同一虚拟目录及其子目录下的所有 .asp 文件构成了 ASP 应用程序.我们非但可以使用 Application 对象,在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数据.而且,Application 对象还有控制访问应用层数据的方法

  • 使用vs2019加.net core 对WeiApi的创建过程详解

    vs2019创建webapi 1.创建新的项目 2.选择.NET CORE的ASP .NET CORE WEB应用程序 3.定义项目名称和存放地点 4.选择API创建项目 5.删除原本的无用的类 6.添加新的方法类 7.设置路由 using Microsoft.AspNetCore.Components; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks;

  • Mysql 5.7.18安装方法及启动MySQL服务的过程详解

    MySQL 是一个非常强大的关系型数据库.但有些初学者在安装配置的时候,遇到种种的困难,在此就不说安装过程了,说一下配置过程.在官网下载的MySQL时候,有msi格式和zip格式.Msi直接运行安装即可,zip则解压在自己喜欢的目录地址即可.在安装这两种的时候,都需要配置才能用.以下介绍主要是msi格式默认的地址:C:\Program Files\ mysql-5.7.18-win32. 一.在安装或者解压后,需要配置环境变量,过程如下:我的电脑->属性->高级系统设置->高级->

  • yum安装CDH5.5 hive、impala的过程详解

    一.安装hive 组件安排如下: 172.16.57.75 bd-ops-test-75 mysql-server 172.16.57.77 bd-ops-test-77 Hiveserver2 HiveMetaStore 1.安装hive 在77上安装hive: # yum install hive hive-metastore hive-server2 hive-jdbc hive-hbase -y 在其他节点上可以安装客户端: # yum install hive hive-server2

  • DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)(对数据库进行各种维护操作)

    一.摘要 Oracle数据库的完整启动过程是分步骤完成的,包含以下3个步骤: 启动实例-->加载数据库-->打开数据库 因为Oracle数据库启动过程中不同的阶段可以对数据库进行不同的维护操作,对应我们不同的需求,所以就需不同的模式启动数据库. 1. Oracle启动需要经历四个状态:SHUTDOWN .NOMOUNT .MOUNT .OPEN 2. Oracle关闭的四种方式:Normal, Immediate, Transactional, Abort 3. 启动和关闭过程详解   二.数

  • JavaScript处理解析JSON数据过程详解

    JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包. JSON的规则很简单: 对象是一个无序的"'名称/值'对"集合.一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"后跟一个":"(冒号):"

  • linux中了minerd之后的完全清理过程(详解)

    一不小心装了一个Redis服务,开了一个全网的默认端口,一开始以为这台服务器没有公网ip,结果发现之后悔之莫及啊 某天发现cpu load高的出奇,发现一个minerd进程 占了大量cpu,google了一下,发现自己中招了 下面就是清理过程 第一步 1.立即停止redis服务,修改端口权限,增加密码措施 2.按照网上的资料 删除 crontab 里的两个内容 sudo rm /var/spool/cron/root sudo rm /var/spool/cron/crontabs/root 3

随机推荐