您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 购物车设计与实现(1-基于数据库)
购物车设计与实现(1-基于数据库)一、数据库设计:1.Tcart表结构如下2.Tuser表(删除了UserID字段,设置UserName为主键)页面设计要点:在该页面开发阶段,为了避免每次都要登陆,可以先在Session中建立UserName变量,赋一个存在的用户名.在ViewBookDetail.aspx和ShopCart.aspx页的Page_load事件中加入下面一行代码:Session[UserName]=‘liqin’;//测试用,网站联调时注释掉一、设计购物车页面1.用GridView控件显示购物车信息通过编辑列添加以下字段(注意字段名与Cart类的属性cart中的各个列名一致),以显示购物车信息:BookIDBookNameNumberPrice注意:为了实现就地编辑数量,数量Number用“模版”字段,通过“编辑摸版”对话框,在其中加入一个TextBox用于显示数量,以及两个用于修改数量的按扭.分别设置其text属性为“+”和“-”,并通过“DataBindings”操作将其CommandArgument属性绑定到BookID字段,如图:为了方便页面的编码,再分别设置按扭的CommandName属性与其Text属性相同。二、页面关键编码://1.在Page_Load事件中加入测试用代码,以模拟用户登录成功protectedvoidPage_Load(objectsender,EventArgse){Session[UserName]=liqin;//测试用用户,以免去开发阶段的登录操作}//2.PreRender为在页面控件已经加载但未呈现前发生的事件,在Page_Load后发生//在此事件中可以更新购物车中总金额和总数量的显示protectedvoidPage_PreRender(objectsender,EventArgse){//定义变量:保存购物车中总数量和总金额intTotalNum=0;DecimalTotalMoney=0;DataTablebooks;//当前用户的购物车中信息//获取当前用户的购物车信息books=TCart.GetCartByUsername(Session[UserName].ToString());if(books.Rows.Count==0){Label_num.Text=你的购物车还是空的,快去选购吧;return;}//将结果绑定到GridView上显示GridView1.DataSource=books;GridView1.DataBind();//统计购物车中总数量和总金额,两种方法intnum;//for(inti=0;ibooks.Rows.Count;i++)//{//num=Int32.Parse(books.Rows[i][Number].ToString());//获取数量//TotalNum+=num;//TotalMoney+=num*Decimal.Parse(books.Rows[i][Price].ToString());//}foreach(DataRowrowinbooks.Rows){num=Int32.Parse(row[Number].ToString());TotalNum+=num;TotalMoney+=num*Decimal.Parse(row[Price].ToString());}//显示购物车中总数量和总金额Label_money.Text=商品总金额(不含运费):+TotalMoney.ToString()+元;Label_num.Text=购物车中共有+books.Rows.Count.ToString()+种商品,总数量为:+TotalNum.ToString()+件;}3.实现购物车的删除功能因为没有使用数据源控件,需要编写GridView的RowDeleting事件代码://删除购物车中的一条记录protectedvoidGridView1_RowDeleting(objectsender,GridViewDeleteEventArgse){intbookid=Int32.Parse(GridView1.Rows[e.RowIndex].Cells[0].Text);stringUserName=Session[UserName].ToString();TCart.DeletefromCart(UserName,bookid);}4.难点:实现数量的就地编辑功能//当用户单击表格中的+-按扭时,更改数量protectedvoidGridView1_RowCommand(objectsender,GridViewCommandEventArgse){Try{intbookid=Convert.ToInt32(e.CommandArgument.ToString());//获取BookID//获取用户选择的操作符:2种方法之一//charop=e.CommandName.ToString()[0];//需要设置按扭的CommandName属性为+或-charop=((Button)e.CommandSource).Text[0];//直接从按扭的Text属性中获取TCart.UpdateCart(Session[UserName].ToString(),bookid,op);}//清空购物车protectedvoidLinkButton1_Click(objectsender,EventArgse){TCart.ClearCart(Session[UserName].ToString());Server.Transfer(~/web/Shopcart.aspx);//刷新页面}//结帐protectedvoidButton3_Click(objectsender,EventArgse){Server.Transfer(~/web/AddNewOrder.aspx);}技术要点总结:1.如何响应GridView模板列中的按扭的事件,按扭的CommandAugrment和CommandName属性作用。(1)是通过RowCommand事件操作,该事件的两个参数的含义是什么?CommandAugrment获取命令参数CommandName获取命令的属性(2)如何获取操作行的键值,如此处的BookID值intbookid=Int32.Parse(GridView1.Rows[e.RowIndex].Cells[0].Text);(3)如何知道用户单击的是哪个按扭?在GridView1_RowCommand中查看CommandName属性2.通过“统计购物车中的总金额”,掌握遍历DataTable对象dt的所有行的两种方法:for(inti=0;idt.Rows.Count;i++){num=Int32.Parse(Dt.Rows[i][Number].ToString())TotalMoney+=num*Decimal.Parse(Dt.Rows[i][Price].ToString());//访问特定行、列的方法}foreach(DataRowrowindt.Rows){num=Int32.Parse(row[Number].ToString());TotalMoney+=num*Decimal.Parse(row[Price].ToString());//访问特定行、列的方法}
本文标题:购物车设计与实现(1-基于数据库)
链接地址:https://www.777doc.com/doc-2081882 .html