内容发布更新时间 : 2024/11/6 7:28:44星期一 下面是文章的全部内容请认真阅读。
义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()的代码如下: ///
/// 计算购物车中购物总金额 ///
///
//计算购物车中购物总金额,并返回值 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()方法清除数组列表内容