购物车设计与实现(1-基于数据库)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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"); //刷新页面

}

相关文档
最新文档