ASP.NET用GridView控件實現購物車功能

一、 將test數據庫附加到數據庫管理系統中;數據庫中的book_info包含下列數據:html

二、 新建一個網站,將images文件夾複製到網站中;
三、 在Default.aspx中,經過DataList控件展現數據庫中的全部數據,以行爲主序,每行3列,單擊購買按鈕時,將商品的ID和數量保存到HashTable中,並將HashTable放置到Session中。sql

?
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;
       }
     }
   }

四、 在Default.aspx中添加一個超連接,連接到shopcart.aspx,在shopcart.aspx中顯示用戶購買的商品信息。
提示:數據庫

A、在shopcart中先定義下列變量:
session

?
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實例化,創建各列。
asp.net

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

?
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、爲按鈕添加單擊事件:
.net

?
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
code

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

製做一個簡單的購物車就是這麼簡單,你們能夠按照個人思路進行創做,在此基礎上在添加一些功能。server

相關文章
相關標籤/搜索