Handles btnReturn.Click
Me.ShowQuery()
End Sub
6.6.4如何实现购物车功能
购物车是商务网站常见的一种功能。它把用户在该网站浏览时所感兴趣的、有购买意向的商品或相关服务短暂记录在客户端。只要用户还处于登录状态就可以随时查看、修改、编辑他所选择的商品。如果用户觉得他所选择的商品非常满意,就可以提交,把商品的相关信息提交到服务器端处理。此时用户所选的商品已经成为历史,不能再进行修改。用户把喜欢的商品都放到购物车里,最后到出口处进行结账,这个过程非常像在超市里买东西。结账就意味着交易完成,这就相当于用户把商品信息提交到服务器端。
在实现购物车功能时,要用到cookie技术。cookie用来保存用户在登录期间,在该网站所有放入购物车中的商品信息。因为cookie中存放的信息字节有限(不能超过4096 字节),所以一般在cookie里只保存该用户放入购物车中的商品id号(数据库设计时专门有一张商品表,每一种商品有唯一的标识id,作为主键),以及用户需要修改的信息,比如所购商品的数量。而商品的其他信息,可以根据商品id从数据库中读出来,再显示到前台页面,用DataGrid显示购物车中的商品信息。顾客对购物车中的商品信息进行编辑。用户也可以清空购物车,购物车的清空状态。编辑结果可存入商品数据库表中,商品数据库表。
下面是实现购物车功能的代码:
Private Sub Page_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load
’在此处放置初始化页的用户代码
ErrMsg.Text=””
’声明cookie
Dim cookie As HttpCookie
’商品的id
Dim Productid As Integer
’商品是否添加的标志
Dim isexist As Boolean=False
If Not IsPostBack Then
’判断前一个页面是否把批Productid通过查询字符串传递过来
If Not Request.QueryString(”ProductId”)Is Nothing Then
Productid=CInt(Request.QueryString(”productId”).ToString())
’获取Cookie(ProductCart)
If Request.Cookies(”ProductCart”)Is Nothing Then
cookie=New HttpCookie(”ProductCart”)
Else
cookie=Request.Cookies(”ProductCart”)
End If
Dim i As Integer
’循环读出Cookie(ProductCart)中所保存用户添加到购物车中的商品的信息
For i=0 To cookie.Values.Count—1
If Not cookie.Values.AllKeys(i)Is Nothing Then
Dim tempstr As String=cookie.Values.AllKeys(i).ToString
If tempstr.Trim()<>””Then
’判断当前添加的商品购物车是否已经存在
If Productid=CInt(cookie.Values.AllKeys(i))Then
isexist=True
Exit For
End If
End If
End If
Next
’购物车里没有改商品,把它添加到购物车了,默认数量为1
If Not isexist Then
cookie.Values.Add(Productid.ToString(),”1”)
Else
ShowErrMsg(”此产品已经添加过了”)
End If
’设置cookie生存时间
Dim ts As TimeSpan=New TimeSpan(0,0,10,0)
cookie.Expires=DateTime.Now.Add(ts)
Response.AppendCookie(cookie)
End If
’把购物车里的商品信息通过DataGrid显示出来
BindGrid()
End If
End Sub
Private Sub ShowErrMsg(ByVal er As String)
ErrMsg.Visible=True
ErrMsg.Text=”<script language="javascript"> alert("”&er&”")</script>”
End Sub
Private Sub BindGrid()
’声明一个datatable表数据结构
Dim mydt As New DataTable
Dim mydr As DataRow
’初始化表的结构
mydt.Columns.Add(New DataColumn(”id”,Type.GetType(”System.String”)))
mydt.Columns.Add(New DataColumn(”Name”,Type.GetType(”System.String”)))
mydt.Columns.Add(New DataColumn(”Price”,Type.GetType(”System.String”)))
mydt.Columns.Add(New DataColumn(”Number”,Type.GetType(”System.String”)))
mydt.Columns.Add(New DataColumn(”Unit”,Type.GetType(”System.String”)))
mydt.Columns.Add(New DataColumn(”Totle”,Type.GetType(”System.String”)))
If Not Request.Cookies(”ProductCart”)Is Nothing Then
Dim cookie As HttpCookie=Request.Cookies(”ProductCart”)
Dim i As Integer
For i=0 To cookie.Values.Count—1
Dim id As Integer
’新行实例化
mydr=mydt.NewRow
’声明数据库表中的一行
Dim row As T_ProductRow
Dim mynearfar As New Nearfar
’把cookie中保存的信息写到定义的表里
If cookie.Values.AllKeys(i)<>””And cookie.Values(i)<>””Then
id=CInt(cookie.Values.AllKeys(i))
’根据cookie中保存的productid查询数据库中商品的其他信息
row=mynearfar.T_ProductCollection.GetByPrimaryKey(id)
mydr(0)=id