购物车设计
2012-06-25 09:20
197 查看
购物车设计(二)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.SqlClient; public partial class Cart : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { CartBinds(); GenerateOrderNumber(); } } protected void CartBinds() { //绑定之前先判断用户是否登录 String userName = String.Empty; //用户不存在则跳转到登录页面 if (Session["User"] == null) { Response.Redirect("Login.aspx"); } else { userName = Session["User"].ToString(); } //购物车数据绑定 //获取产品ID String PID = Request.QueryString["PID"]; if (!String.IsNullOrEmpty(PID)) { String sql = "select * from t_Product where productId=" + Convert.ToInt32(PID); SqlDataReader sdr = DBHelper.GetReader(sql); DataTable cart; //判断购物车数据是否为空 if (Session["Cart"] == null) { cart = new DataTable(); cart.Columns.Add("productId", typeof(String)); cart.Columns.Add("productName", typeof(String)); cart.Columns.Add("price", typeof(String)); cart.Columns.Add("discountPrice", typeof(String)); cart.Columns.Add("discount", typeof(String)); cart.Columns.Add("productNum", typeof(String)); if (sdr.Read()) { DataRow dr = cart.NewRow(); dr["productId"] = sdr["productId"]; dr["productName"] = sdr["productName"]; dr["price"] = sdr["price"]; dr["discountPrice"] = Convert.ToDecimal(sdr["price"]) * Convert.ToDecimal(sdr["discount"]) / 10; dr["discount"] = sdr["discount"]; dr["productNum"] = 1; cart.Rows.Add(dr); } } else //判断产品在购物车中是否存在重复的产品,如果存在则添加数量 { int oldPID = Convert.ToInt32(PID); cart = Session["Cart"] as DataTable; bool flag = false;//是否有重复产品 foreach (DataRow dr in cart.Rows) { if (oldPID == Convert.ToInt32(dr["productId"])) { dr["productNum"] = Convert.ToInt32(dr["productNum"]) + 1; flag = true; break; } } if (flag == false) { if (sdr.Read()) { DataRow dr = cart.NewRow(); dr["productId"] = sdr["productId"]; dr["productName"] = sdr["productName"]; dr["price"] = sdr["price"]; dr["discountPrice"] = Convert.ToDecimal(sdr["price"]) * Convert.ToDecimal(sdr["discount"]) / 10; dr["discount"] = sdr["discount"]; dr["productNum"] = 1; cart.Rows.Add(dr); } } } sdr.Close(); Session["Cart"] = cart; ReBinds();//调用重绑定 } } //购物车绑定 protected void ReBinds() { DataTable cart = Session["Cart"] as DataTable; gvShoppingCart.DataSource = cart; gvShoppingCart.DataBind(); //计算购物总金额 decimal total = 0; foreach(DataRow dr in cart.Rows) { decimal discountPrice = Convert.ToDecimal(dr["discountPrice"]); decimal productNum = Convert.ToDecimal(dr["productNum"]); total += discountPrice * productNum; } liTotal.Text = total.ToString(); } //改变产品数量时激发 protected void txtProductNum_TextChanged(object sender, EventArgs e) { //获取用户修改数量的文本框对象 TextBox txtNumber=sender as TextBox; //获取文本框所在GridView中当前行的对象 GridViewRow rows=txtNumber.Parent.Parent as GridViewRow; //获取当前修改数量的产品的ID String pid=rows.Cells[0].Text; //获取当前用户所修改产品的数量 String number = txtNumber.Text; //取购物车数据 DataTable cart= Session["Cart"] as DataTable; //查找当前所改变数量的产品并更新产品数量 foreach (DataRow dr in cart.Rows) { if (dr["productId"].ToString() == pid) { dr["productNum"] = number;//更新购物车数据产品的数量 break; } } ReBinds();//调用重绑定 } /*在GridView中,当一个按钮的CommandName属性的值为:Delete,那么将执行 *GridView的RowDeleting事件*/ protected void gvShoppingCart_RowDeleting(object sender, GridViewDeleteEventArgs e) { //获取DataKey中所定义的值(产品ID) String pid=gvShoppingCart.DataKeys[e.RowIndex].Value.ToString(); DataTable cart=Session["Cart"] as DataTable; //查找要删除的产品 foreach(DataRow dr in cart.Rows) { if (pid == dr["productId"].ToString()) { cart.Rows.Remove(dr);//删除购物车中的产品 break; } } //如果购物车无数据,更新总价格为0 if(cart.Rows.Count==0) { liTotal.Text = "0"; } ReBinds();//重绑定 } //生成订单号 public void GenerateOrderNumber() { //设置用户名 liUserName.Text = Session["User"].ToString(); //第一次访问购物车页面生成订单编号 if (Session["OrderID"] == null) { Session["OrderID"] = DateTime.Now.Ticks.ToString(); } //存在订单编号 liOrderNumber.Text= Session["OrderID"].ToString(); } //提交订单 protected void btnSubmit_Click(object sender, EventArgs e) { try { //提交订单 String sql = "insert into t_Order values " + "(@orderId,@userName,@consignee,@address,@zip,@total,@deliveryType,@paymentType,@finishTime)"; SqlParameter[] paramter = { new SqlParameter("@orderId",liOrderNumber.Text), new SqlParameter("@userName",liUserName.Text), new SqlParameter("@consignee",txtConsignee.Text), new SqlParameter("@address",txtAddress.Text), new SqlParameter("@zip",txtZip.Text), new SqlParameter("@total",liTotal.Text), new SqlParameter("@deliveryType",dlDeliveryType.SelectedValue), new SqlParameter("@paymentType",dlPaymentType.SelectedValue), new SqlParameter("@finishTime",DateTime.Now) }; DBHelper.ExecuteCommand(sql, paramter); //提交订购产品 //获取购物车产品数据 DataTable cart = Session["Cart"] as DataTable; //插入该订单下的所有产品 foreach (DataRow dr in cart.Rows) { sql = "insert into t_OrderProduct values (@OrderID,@ProductID,@Amount)"; SqlParameter[] paramter2 = { new SqlParameter("@OrderID",liOrderNumber.Text), new SqlParameter("@ProductID",dr["productID"]), new SqlParameter("@Amount",dr["productNum"]) }; DBHelper.ExecuteCommand(sql, paramter2); } Page.ClientScript.RegisterStartupScript(this.GetType(), "msg","alert('订购成功!');",true); //清空订单编号 Session["OrderID"] = null; //重新生成订单编号 GenerateOrderNumber(); //清空购物车 cart.Clear(); //重绑定 ReBinds(); } catch{ } } //继续购物 protected void btnContinue_Click(object sender, EventArgs e) { Response.Redirect("ProductList.aspx"); } }
相关文章推荐
- 商城购物车的实现设计思想
- JAVA课程设计+购物车 个人博客
- Java课程设计 购物车系统(个人博客)
- 十大B2C网站购物车的流程设计对比分析
- javaweb图书商城设计之购物车模块(3)
- [js高手之路]设计模式系列课程-发布者,订阅者重构购物车
- 购物车设计
- 常见b2c网站购物车的设计
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
- 常见电商B2C网站购物车的设计
- 购物车模块设计及实现(SSH架构)
- Java简单购物车设计
- 常见b2c网站购物车的设计
- 使用JSP做购物车(分析设计)
- 购物车设计开发
- 购物车设计思路
- 电子商务B2C网站购物车设计
- ######03.经典实体Bean设计:购物项-购物车;订单项-订单。---记录。便于复习。借鉴设计思想
- Servlet+oracle MVC 架构 搭建简易购物车web项目---数据库设计
- evak购物车--课程设计(201521123037邱晓娴)