ASP.NET用GridView控件实现购物车功能

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

2、 新建一个网站,将images文件夹复制到网站中;

3、 在Default.aspx中,通过DataList控件展示数据库中的所有数据,以行为主序,每行3列,单击购买按钮时,将商品的ID和数量保存到HashTable中,并将HashTable放置到Session中。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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中先定义下列变量:

?


1

2

3

4

5

6

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实例化,建立各列。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

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中的各列:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<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事件:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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、为按钮添加单击事件:

?


1

2

3

4

5

6

7

8

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

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();

 

  }

}

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

类似文章:

时间: 2024-10-29 19:12:07

ASP.NET用GridView控件实现购物车功能的相关文章

asp.net中gridview控件的一些基本使用方法

[ 转自苏飞博客]共两篇 (1)菜单目录: GridView无代码分页排序GridView选中,编辑,取消,删除GridView正反双向排序GridView和下拉菜单DropDownList结合GridView和CheckBox结合鼠标移到GridView某一行时改变该行的背景色方法一鼠标移到GridView某一行时改变该行的背景色方法二GridView实现删除时弹出确认对话框GridView实现自动编号GridView实现自定义时间货币等字符串格式GridView实现用"..."代替

ASP.NET编辑与更新数据(非GridView控件实现)

Insus.NET在实现<ASP.NET开发,从二层至三层,至面向对象 (5)>http://www.cnblogs.com/insus/p/3880606.html 中,没有把数据编辑与更新功能一起演示,留下给网友们自由发挥,但是还是有网友想看看Insus.NET用实现方法. 以前Insus.NET的做法,是在GridView控件中进行.如这篇视频教程<GridView Edit Update Cancel Delete>http://www.cnblogs.com/insus/

Repeater, DataList, 和GridView控件的区别

http://blog.sina.com.cn/s/blog_646dc75c0100h5p6.html http://www.cnblogs.com/phone/archive/2010/09/15/1826891.html 1. GridView 控件 GridView 控件用于显示表中的数据.通过使用 GridView 控件,您可以显示.编辑.删除.排序和翻阅多种不同的数据源(包括数据库.XML 文件和公开数据的业务对象)中的表格数据. 显示表格数据是软件开发中的一个周期性任务.ASP.N

027. asp.net中数据绑定控件之 GridView控件

GridView控件支持下面的功能: 绑定至数据源控件, 如SqlDataSource 内置排序功能 内置更新和删除功能 内置分页功能 内置行选择功能 可以编程方式访问GridView对象模型以动态设置属性 处理事件等 多个键字段 用于超链接列的多个数据字段 可通过主题和样式自定义外观 Girdview控件常用属性: BackImageUrl 背景图片 EmptyDtatText 没有任何数据时显示的文字 GridLines 网格线的样式 ShowHeader 是否显示页首连接 ShowFoot

ASP.NET——GridView控件绑定数据

        ASP.NET提供了许多种数据服务器控件,用于在Web页面中显示数据库中的表数据,GridView控件就是其中之一.这个控件和我们以前学过的DataGridView控件几乎是一样的,所以对GridView控件我们也并不陌生,下面简单介绍一下它的使用.         前台: 在工具箱中找到GridView控件,并把它拖拽到代码编辑区域.   第一步,进入设计界面,在GridView控件上方有一个向右的黑色小三角,单击这个按钮,选择编辑列,如图:          第二步,去掉自动

asp.net GridView控件的列属性

BoundField 默认的数据绑定类型,通常用于显示普通文本 CheckBoxField 显示布尔类型的数据.绑定数据为TRUE时,复选框数据绑定列为选中状态:绑定数据为FALSE时,则显示未选中状态.在正常情况下,CheckBoxField显示在表格中的复选框控件处于只读状态.只有GridView控件的某一行进入编辑状态后,复选框才恢复为可修改状态. CommandField 显示用来执行选择,编辑或删除操作的预定义命令按钮,这些按钮可以呈现为普通按钮,超链接,图片等外观. 通过字段的But

GridView控件相关2

---恢复内容开始--- 此文档主要侧重---GridView控件上的 [更新] 和 [删除] 两个事件的具体操作: 1.在非编辑状态,如何取出[BoundField]模板中的绑定值: string s = GridView1.Rows[2].Cells[0].Text; 在编辑状态下,如何取出GridView中用[BouldField]绑定的内容------即,如何获得[TextBox]中用户输入的内容: ((TextBox)GridView1.Rows[2].Cells[0].Control

GridView控件相关

---恢复内容开始--- GridView控件的[AutoGenerateColumns]属性(bool类型)的意思是----运行时是否基于关联的数据源自动生成列. 这样造成的影响是列的标题自动生成无法进行修改. 想手工的控制列名,则需把这个属性设为False.然后再控件的右上角点击,出现[编辑列],或者在属性页面设置[Columns]属性,都会弹出编辑列的界面: (1).[BoundField]----绑定以文本形式显示一个字段.它的属性: HeaderText----就是显示的列名, Dat

数据绑定技术一:GridView控件

在网站或应用程序中,要显示数据信息,可用到ASP.NET提供的数据源控件和能够显示数据的控件. 一.数据源控件 数据源控件用于连接数据源.从数据源中读取数据以及把数据写入数据源. 1.数据源控件特点 使用数据源控件可以不用编写任何代码就可以实现页面的数据绑定. 2.数据源控件的种类 .NET框架提供了如下几个数据源控件: SqlDataSource,它用来访问存储在关系数据中的数据源,它与SQL Server一起使用时支持高级缓存功能.当数据作为DataSet对象返回时,此控件还支持排序.筛选和