当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  ASP.NET 2.0打造购物车和支付系统之二(2)

 ASP.NET 2.0打造购物车和支付系统之二(2)

点击次数:14 次 发布日期:2008-11-26 12:16:14 作者:源代码网
源代码网推荐      三、购物篮
源代码网推荐  
源代码网推荐  图2.示例程序中实现的购物篮。
源代码网推荐  
源代码网推荐    购物篮(参考图2)用于存储产品(顾客通过点击紧邻每一种产品的"Add to basket"按钮从产品列表中选择)。把购物篮存储在会话状态中的实现是不错的技术,因为在一次完整的购物中,在任何时候顾客决定离开你的站点,或可能倒空他们的购物篮时,所有这些数据都有可能被丢弃。当然,由于若干原因,例如为了市场调查目的以标识谁在分析什么以及判断购物潮流等时,你还可以选择把顾客的购物篮内容存储在一个数据库中。另一个理由可能是,向他们展示"Last time you were here you looked at these items ..."类型显示。这要求你有一个方法来区分顾客。两种通常使用的技术是,把一个cookie存储在用户自己的系统中-通过使用一个唯一的ID来标识他们的未来访问,或使用他们的登录ID来加以区别(如果你已经实现顾客登录的话)。
源代码网推荐  
源代码网推荐    更新的购物篮还使用createProductDT()函数来创建它的初始的空DataTable。在本演示程序中,我们将使用相同的表格结构,但是你可以通过删除一些数据列来进一步"提炼"你的购物篮。在大多数情况下,你仅需要存储每种产品的ID和数量,由于你能够容易地基于它的ID查找实际的产品细节。
源代码网推荐  
源代码网推荐    每次经由产品列表把一个产品添加到篮中时,它的"Add to basket"按钮都会激活一个OnServerClick事件:
源代码网推荐  
源代码网推荐  protected void shoPBuy_OnServerClick(object source, EventArgs e)
源代码网推荐  {
源代码网推荐   int index = ((GridViewRow)((HtmlInputButton)source).Parent.NamingContainer).RowIndex;
源代码网推荐   addToBasket(Convert.ToInt32(gvProducts.DataKeys[index].Value));
源代码网推荐  }
源代码网推荐  protected void addToBasket(int productID)
源代码网推荐  {
源代码网推荐   DataTable dtBasket = getBasketDt();
源代码网推荐   //循环遍历购物篮并检查是否该项已经存在
源代码网推荐   bool found = false;
源代码网推荐   for(int i = 0; i < dtBasket.Rows.Count; i++)
源代码网推荐   {
源代码网推荐    if(Convert.ToInt32(dtBasket.Rows[i]["id"]) == productID)
源代码网推荐    {
源代码网推荐     //增加数量并且标记为已发现
源代码网推荐     dtBasket.Rows[i]["quantity"] = Convert.ToInt32(dtBasket.Rows[i]["quantity"]) + 1;
源代码网推荐     found = true;
源代码网推荐     //当我们已经找到一项时跳出循环
源代码网推荐     break;
源代码网推荐    }
源代码网推荐   }
源代码网推荐   //如果该项没有找到,则把它添加为一个新行
源代码网推荐   if(!found)
源代码网推荐   {
源代码网推荐    DataTable dtProducts = getProductsDt();
源代码网推荐    DataRow drProduct = dtProducts.Rows.Find (productID);
源代码网推荐    //现在,我们已经从数据源中得到了需要的数据,那么我们将把一个新行添加到购物篮中
源代码网推荐    DataRow newRow = dtBasket.NewRow();
源代码网推荐    newRow["id"] = drProduct["id"];
源代码网推荐    newRow["name"] = drProduct["name"];
源代码网推荐    newRow["price"] = drProduct["price"];
源代码网推荐    newRow["quantity"] = 1;
源代码网推荐    dtBasket.Rows.Add(newRow);
源代码网推荐   }
源代码网推荐   //把新更新的购物篮存储回会话中
源代码网推荐   Session["dtBasket"] = dtBasket;
源代码网推荐   //更新购物篮,也即是"重新绑定它"
源代码网推荐   updateShopBasket();
源代码网推荐  }
源代码网推荐  
源代码网推荐    我们是使用shopBuy_OnServerClick()函数来"捕获"这一点的(这个函数能标识按钮属于哪一行),得到相关产品的ID并用它来调用addToBasket()。在该函数内,我们可以使用给定的产品ID来检查购物篮。如果它已经存在于购物篮中,那么我们需增加它的数量;而如果它不存在,那么我们把它添加为一个新行。最后,我们把购物篮重新绑定到它的更新的DataSource上。参考图3。
源代码网推荐  
源代码网推荐  该购物篮,就象产品GridView一样,也使用TemplateColumns;因此,我们可以在每一行上建立一个数量文本框。这为顾客提供一种容易的方式来更新他们要求的每一种商品的数目。一旦他们改变了这些值,他们点击在购物篮下面的"Update Quantities"按钮。这将激活一个为shopUpdateBasketQuantities_OnServerClick()所捕获的OnServerClick事件。这类似于addToBasket()函数:我们必须定位购物篮中的产品,然后更新它的数量。区别在于:当检查从文本框中检索的数据时,我们必须小心,因为你根本不会知道什么人能够进入到其中致使弄乱你的系统。下面是处理这一检查的函数的部分代码片断:
源代码网推荐  
源代码网推荐  //从Quantity文本框中读取数据
源代码网推荐  HtmlInputText itQuant = (HtmlInputText)row.FindControl("itProductQuantity");
源代码网推荐  //把该值转换成一个整数
源代码网推荐  try
源代码网推荐  {
源代码网推荐   int quant = Convert.ToInt32(itQuant.Value);
源代码网推荐  
源代码网推荐   /*如果该值成功转换成一个整数,那么我们还
源代码网推荐   需要检查它不是一个负数;否则的话,我们可能欠
源代码网推荐   顾客钱!*/
源代码网推荐   if(quant > 0)
源代码网推荐   {
源代码网推荐    drProduct["quantity"] = quant;
源代码网推荐   }
源代码网推荐   else
源代码网推荐   {
源代码网推荐    drProduct.Delete();
源代码网推荐   }
源代码网推荐  }
源代码网推荐  catch
源代码网推荐  {
源代码网推荐   //如果我们不能把它转换成整数,那么我们不作什么改变。
源代码网推荐  }
源代码网推荐  
源代码网推荐    例如,如果有人在quantity域中输入-100,你可能还会欠他们的钱!不过,一般地,你可能不会把钱支付给他们,但是这要依赖于你的支付系统是如何建立的。由于这个原因,我们把这个整数分析包装到一个try/catch语句块内,以便在不能分析的情况下,我们保留原来的值不变。此后,我们检查这个quantity以确保它大于零。如果它小于或等于零,那么我们删除这一行。最后,在检查完购物篮中所有的产品并且修改它们各自相应的数量后,我们即保存购物篮并更新显示。
源代码网推荐  
源代码网推荐    购物篮的最后一个关键组成是updateShopBasket()函数:
源代码网推荐  
源代码网推荐  private void updateShopBasket()
源代码网推荐  {
源代码网推荐   gVBasket.DataSource = getBasketDt();
源代码网推荐   gvBasket.DataBind();
源代码网推荐   ibEmptyBasket.Visible = ibUpdateBasketQuantities.Visible = ibBasketCheckout.Visible = gvBasket.Rows.Count > 0;
源代码网推荐  }
源代码网推荐  
源代码网推荐    这个函数能够从会话状态中提取购物篮的一个副本,这反过来将创建会话购物篮,如果它已经不存在的话,然后绑定到GridView。其最终目的是隐藏或显示三个购物篮按钮;因为如果购物篮为空的话,不需要显示它们。
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华