购物车设计与实现(1-基于数据库)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
购物车设计与实现(1-基于数据库)
一、数据库设计:
1.Tcart表结构如下
2.Tuser表(删除了UserID字段,设置UserName为主键)
页面设计要点:
在该页面开发阶段,为了避免每次都要登陆,可以先在Session中建立UserName变量,赋一个存在的用户名.
在ViewBookDetail.aspx和ShopCart.aspx页的Page_load事件中加入下面一行代码:
Session["UserName"]=‘liqin’; //测试用,网站联调时注释掉
一、设计购物车页面
1.用GridView控件显示购物车信息
通过编辑列添加以下字段(注意字段名与Cart类的属性cart中的各个列名一致),以显示购物车信息:
BookID BookName Number Price
注意:为了实现就地编辑数量,数量Number用“模版”字段, 通过“编辑摸版”对话框,在其中加入一个TextBox 用于显示数量,以及两个用于修改数量的按扭.
分别设置其text属性为“+”和“-”,并通过“DataBindings”操作将其CommandArgument属性绑定到BookID字段,如图:
为了方便页面的编码,再分别设置按扭的CommandName属性与其Text属性相同。
二、页面关键编码:
//1.在Page_Load事件中加入测试用代码,以模拟用户登录成功
protected void Page_Load(object sender, EventArgs e)
{
Session["UserName"] = "liqin"; //测试用用户,以免去开发阶段的登录操作
}
// 2.PreRender为在页面控件已经加载但未呈现前发生的事件,在Page_Load后发生//在此事件中可以更新购物车中总金额和总数量的显示
protected void Page_PreRender(object sender, EventArgs e)
{
//定义变量:保存购物车中总数量和总金额
int TotalNum=0;
Decimal TotalMoney=0;
DataTable books; //当前用户的购物车中信息
//获取当前用户的购物车信息
books = TCart.GetCartByUsername(Session["UserName"].ToString());
if (books.Rows.Count == 0)
{
Label_num.Text = "你的购物车还是空的,快去选购吧";
return;
}
//将结果绑定到GridView上显示
GridView1.DataSource = books;
GridView1.DataBind();
//统计购物车中总数量和总金额,两种方法
int num;
//for (int i = 0; i < books.Rows.Count; i++)
// num = Int32.Parse(books.Rows[i]["Number"].ToString()); //获取数量
// TotalNum += num;
// TotalMoney += num * Decimal.Parse(books.Rows[i]["Price"].ToString());
//}
foreach (DataRow row in books.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.实现购物车的删除功能
因为没有使用数据源控件,需要编写GridV iew的RowDeleting事件代码:
//删除购物车中的一条记录
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int bookid = Int32.Parse(GridView1.Rows[e.RowIndex].Cells[0].Text);
string UserName= Session["UserName"].ToString();
TCart. DeletefromCart(UserName,bookid);
}
4.难点:实现数量的就地编辑功能
//当用户单击表格中的+ - 按扭时,更改数量
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
Try{
int bookid = Convert.ToInt32(mandArgument.ToString()); //获取BookID
//获取用户选择的操作符:2种方法之一
//char op = mandName.ToString()[0]; //需要设置按扭的CommandName属性为+或-
char op = ((Button)mandSource).Text[0]; //直接从按扭的Text属性中获取
TCart.UpdateCart(Session["UserName"].ToString(), bookid, op);
}
//清空购物车
protected void LinkButton1_Click(object sender, EventArgs e)
{
TCart.ClearCart(Session["UserName"].ToString ());
Server.Transfer("~/web/Shopcart.aspx"); //刷新页面
}