Web程序设计实验指导书1116 下载本文

义1个Cart组,包含ProId、ProName、ListPrice、Qty和TotalPrice。而购物车需要存储”true”。

操作时,打开网站根文件夹下的web.config,在元素中,编写配置节和配置节代码如下:

(5)设计ShopCart.aspx

如图6-13所示,向ShopCart.aspx页面输入“温馨提示:……..”、“总价:”等信息,添加1个GridView控件、2个Label控件和5个Button控件。适当调整各控件的大小和位置。分别设置各控件的属性ID值为:gvCart、lblError、lblTotalPrice、btnDelete、btnClear、btnComputeAgain、btnSettle和btnContinue。

图6-13 设计界面(3)

控件gvCart的属性Columns值设置如图6-14所示,添加1个TemplateField字段“复选框列”、3个BoundField字段和1个TemplateField字段“购买数量”。

图6-14 属性Columns设置

TemplateField字段“复选框列”的编辑界面如图6-15所示,向ItemTemplate添加1个CheckBox控件,设置属性ID值为chkProduct。

图6-15 设计界面(4)

3个BoundField字段各属性设置如表6-3所示。

表6-3BoundField字段各属性设置表

列名 商品ID 商品名称 商品价格 属性名 DataField HeaderText DataField HeaderText DataField HeaderText 属性值 ProId 商品ID ProName 商品名称 ListPrice 商品价格 说明 绑定数据列ProId 表头的列名称 绑定数据列ProName 表头的列名称 绑定数据列ListPrice 表头的列名称 编辑TemplateField字段“购买数量”,向ItemTemplate添加1个TextBox控件,设置属性ID值为txtQty,绑定属性Text的代码表达式为Bind(”Qty”)。

(6)编写ShopCart.aspx事件代码

页面首次载入时,将判断从ProductShow.aspx传递过来的ProductId是否为空值,若非空,则获取ProductId值,再将ProductId值对应的商品信息添加到购物车。然后,显示购物车中包含的商品数据。相应的事件代码如下:

protected void Page_Load(object sender, EventArgs e) {

if (!IsPostBack) {

if (Request.QueryString[\] != null) {

int id = int.Parse(Request.QueryString[\]);

AddProduct(id); //调用自定义方法AddProduct()向购物车添加指定商品编号的商品 }

Bind(); //调用自定义方法Bind()显示购物车中的商品 }

}

自定义方法AddProduct()的代码如下: protected void AddProduct(int id) {

//isExit表示商品是否已在购物车中,值1表示“是”,值0表示否 int isExit = 0; for (int {

//如果同类商品已经存在购物车中,将购买量加1 if (id == (int {

int s = (int s++;

Profile.Save(); isExit = 1; } }

if (isExit == 0) {

//如果购物车中无此类商品,添加一个新产品到Profile.Cart各属性中 MyPetShopDataContext db = new MyPetShopDataContext(); var products = from p in db.Product where p.ProductId == id select p;

foreach (var product in products) { }

//保存到ASPNETDB.mdf数据库 Profile.Save(); }

}

自定义方法Bind()将Profile.Cart中的购物记录存储到一个临时表dt中,再将dt作为数据源,绑定到gvCart,代码如下: ///

/// 将Profile.Cart中的购物记录放在一个临时表dt中,再将dt作为数据源,绑定到gvCart

///

protected void Bind() {

//将Profile.Cart中的购物记录存储到一个临时表dt中,再将dt作为数据源,绑定到gvCart

//调用自定义方法TotalPrice()计算购物车中商品的总价 DataTable dt = new DataTable(); \); \); \); \);

for (int {

DataRow row = dt.NewRow(); }

gvCart.DataSource = dt; gvCart.DataBind(); }

自定义方法TotalPrice()的代码如下: ///

/// 计算购物车中购物总金额 ///

/// 返回总金额 protected decimal TotalPrice() {

//计算购物车中购物总金额,并返回值 decimal sum = 0; for (int {

int qty = (int

decimal listPrice = (decimal sum += qty * listPrice; }

return sum; }

按钮btnDelete被单击时执行的事件代码如下: ///

/// 循环利用FindControl()找到CheckBox控件chkProduct,然后判断其Checked值,若为True,则调用自定义方法DeleteProduct()执行删除操作 ///

///

protected void btnDelete_Click(object sender, EventArgs e) {

int productId = 0; for (int {

CheckBox chkProduct = new CheckBox();

chkProduct = (CheckBox)gvCart.Rows[i].FindControl(\); if (chkProduct != null) {

if (chkProduct.Checked) {

productId = int.Parse(gvCart.Rows[i].Cells[1].Text); DeleteProduct(productId); //调用自定义方法DeleteProduct()删除购物车中指定商品编号的商品 } } }

Bind(); //调用自定义方法Bind()显示购物车中商品 }

///

自定义方法DeleteProduct()的代码如下:

/// 在购物车Profile.Cart中删除指定商品编号的购物记录 ///

/// protected void DeleteProduct(int id) {

//循环查找与id相匹配商品对应的数组列表下标 int j = 0; for (int {

if (id == (int {

j = i; break; } }

//移除指定下标的数组元素 //保存到ASPNETDB.mdf数据库 Profile.Save();

}

按钮btnClear被单击时执行的事件代码如下:

protected void btnClear_Click(object sender, EventArgs e) {

//调用各数组列表对象的Clear()方法清除数组列表内容