//保存到ASPNETDB.mdf Profile.Save();
Response.Redirect(\, true); }
按钮btnComputeAgain被单击时执行的事件代码如下:
protected void btnComputeAgain_Click(object sender, EventArgs e) {
lblError.Text = \;
MyPetShopDataContext db = new MyPetShopDataContext();
//循环利用FindControl()找到TextBox控件txtQty,然后判断是否为空值,若非空,则在Product表中查找txtQty所在行商品编号确定的商品,从而比较txtQty中的输入值和商品的库存量 for (int {
TextBox txtQty = new TextBox();
txtQty = (TextBox)gvCart.Rows[i].FindControl(\); if (txtQty != null) {
var product = (from p in db.Product where p.ProductId == int.Parse(gvCart.Rows[i].Cells[1].Text)
select p).First();
if (int.Parse(txtQty.Text) > product.Qty) //库存不足 {
lblError.Text += \:库存不足,商品名为 \ + gvCart.Rows[i].Cells[2].Text + \的库存数量为 \; } else {
ChangeQty(int.Parse(gvCart.Rows[i].Cells[1].Text), int.Parse(txtQty.Text)); //调用自定义方法ChangeQty()改变存储在Profile中的购买数量
} } }
Bind(); //调用自定义方法Bind()显示购物车中商品
}
自定义方法ChangeQty()的代码如下: ///
/// 根据指定的商品编号,修改Profile中对应商品的库存量 ///
///
/// protected void ChangeQty(int id, int qty)
{
for (int {
if (id == (int {
Profile.Save(); } }
}
按钮btnSettle被单击时执行的事件代码如下:
protected void btnSettle_Click(object sender, EventArgs e) {
Response.Redirect(\, true);
}
按钮btnContinue被单击时执行的事件代码如下:
protected void btnContinue_Click(object sender, EventArgs e) {
Response.Redirect(\);
}
(7)设计SubmitCart.aspx
如图6-16所示,向SubmitCart.aspx页面添加1个用于布局的5行2列表格,合并相应的单元格,输入“填写发货地址:”、“送货地址:”、“邮编:”、“联系电话:”等信息,添加3个TextBox控件、2个Button控件和1个Label控件。适当调整各控件的大小和位置。分别设置各控件的属性ID值为:txtGoodsAddress、txtzip、txtPhone、btnContinue和btnSubmit。
图6-16 设计界面(5)
(8)编写SubmitCart.aspx事件代码
按钮btnContinue被单击时执行的事件代码如下:
protected void btnContinue_Click(object sender, EventArgs e) {
Response.Redirect(\);
}
按钮btnSubmit被单击时执行的事件代码如下:
protected void btnSubmit_Click(object sender, EventArgs e) {
MyPetShopDataContext db = new MyPetShopDataContext(); //在Order表中添加记录 Order order = new Order();
//目前假设订单的用户名都为“张三”,实际情况应保存登录的用户名。若使用ASP.NET 3.5登录系列控件实现用户管理,可通过返回登录的用户名 order.UserName = \张三\; order.OrderDate = DateTime.Now; order.Status = \未审核\;
//插入实体order,提交更改后即在Order表中插入一条记录
db.SubmitChanges(); //在OrderItem中添加记录 int id = order.OrderId; for (int {
OrderItem orderItem = new OrderItem(); orderItem.OrderId = id; orderItem.ProName = (string orderItem.ListPrice = (decimal orderItem.Qty = (int
orderItem.TotalPrice = (intdecimal db.SubmitChanges(); //修改Product表的商品库存
var product = (from c in db.Product where c.ProductId == (int select c).First(); product.Qty -= orderItem.Qty; db.SubmitChanges(); }
//清空各数组列表对象 \;
lblMsg.Text = \已经成功结算,谢谢光临!\; }
(9)从浏览ProductShow.aspx开始对MyPetShop网站进行测试。 2.利用DetailsView控件实现数据插入、编辑、删除等操作
(1)设计Web窗体
新建一个Web窗体,切换到“设计”视图。如图6-17所示,向页面添加1个DetailsView控件和3个LinqDataSource控件。
图6-17 设计界面(6)
(2)设置属性
①分别设置各控件的属性ID值为:dvProduct、ldsProduct、ldsCategory和ldsSupplier。 ②ldsProduct的数据选择配置如图6-18所示,配置完成后,再单击ldsProduct的智能标记,选中“启用删除”、“启用插入”和“启用更新”。
图6-18 “配置数据选择”界面
③配置ldsCategory的数据源为Category表,数据选择CategoryId和Name。 ④配置ldsSupplier的数据源为Supplier表,数据选择SuppId和Name。
⑤单击dvProduct的智能标记,选择数据源ldsProduct;选中“启用分页”、“启用插入”、“启用编辑”和“启用删除”;单击“编辑字段”,将CategoryId列和SuppId列分别转换为TemplateField。
⑥TemplateField字段CategoryId的编辑界面如图6-19所示,向EditItemTemplate和InsectItemTemplate分别添加1个DropDownList控件,并绑定到数据源ldsCategory。类似地设置TemplateField字段SuppId。
图6-19 设计界面(7)
⑦浏览建立的Web窗体进行测试。
实验七 主题、母版和用户控件
一.实验目的
(1) 掌握建立和使用用户控件的方法。
(2) 掌握利用母版页和内容页建立网页的方法。 (3) 掌握主题的建立和使用方法。
二.实验内容及要求
1. 设计用于显示商品类别和数量的用户控件 要求如下:
(1) 控件浏览效果如图7-1所示。
图7-1 控件测试页浏览效果
(2) 单击分类名称则跳转到ProductShow.aspx页,显示该类商品的列表。 (3) 测试该用户控件。
2. 利用母版页重新设计MyPetShop各页面 要求如下:
(1) 在给出的例子上进行修改。
(2) 母版页设计效果如图7-2所示。左边包含“实验内容1”建立的用户控件,右边为
ContentPlaceHolder控件ContentPlaceHolderRinght。
(3)
图7-2 母版页设计效果
(4) 利用母版页重新建立商品查看页ProductShow.aspx,浏览效果如图7-3所示,左边是商
品列表,单击分类名称则在右边分页显示对应类别的商品信息。
图7-3 “商品查看页”浏览效果
三.实验步骤
1. 设计用于显示商品类别和数量的用户控件
(1)打开网站MyPetShop,添加Web用户控件Category.ascx。
(2)Category.ascx的“设计”视图中添加一个GridWiew控件,设置属性ID值gvProduct。控件gvProduct的属性Columns值设置如图7-10所示,部添1个HyperLinkField字段和一个BoundField字段。在图7-10中,选择HyperLinkField字段设置其属性,属性设置如表7-1所示。选择BoundField字段字段设置其属性,属性设置如表7-2所示。