购物车设计
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
购物车设计(一)登陆页面 ———————————————————————————————— using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; public partial class Login : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnLogin_Click(object sender, EventArgs e) { String sql = "select count(*) from "+ "t_Login where and "; SqlParameter [] paramter= { new SqlParameter("@username",txtUserName.Text), new SqlParameter("@password",txtPassword.Text) }; int result=(int)DBHelper.GetScalar(sql,paramter); if (result > 0) { Session["User"] = txtUserName.Text; Response.Redirect("ProductList.aspx"); } else { Page.ClientScript.RegisterStartupScript(this.GetType(), "msg","alert('用户名密码错误');",true); } } } —————————————————————————————— 产品列表 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class ProductList : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { if (Session["User"] != null) { lblUserName.Text="欢迎光临:"+Session["User"].ToString(); plUser.Visible = false; plLogin.Visible = true; } rpCategroyBinds(); dlProductListBinds(); } } protected void rpCategroyBinds() { rpCategroy.DataSource = DBHelper.GetDataTable("select * from t_Category"); rpCategroy.DataBind(); } protected void dlProductListBinds() { String CID=Request.QueryString["CID"]; String sql="select * from t_Product p inner join "+ "t_Image i on p.productId=i.PID"; if (!String.IsNullOrEmpty(CID)) { sql += " where p.categoryId="+Convert.ToInt32(CID); } dlProductList.DataSource = DBHelper.GetDataTable(sql); dlProductList.DataBind(); } //退出 protected void lbnSignOut_Click(object sender, EventArgs e) { Session.Abandon();//取消当前会话 Session.Clear();//清空会话 Response.Redirect("ProductList.aspx"); } } ———————————————————————— 产品详细介绍 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 ProductDetails : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { ProductDataBinds(); rpCommentsBinds(); } } protected void ProductDataBinds() { String pid = Request.QueryString["pid"]; ViewState["pid"] = pid; if (!String.IsNullOrEmpty(pid)) { String sql = "select * from t_Product p join t_Image i " + "on p.productId=i.PID" + " where p.productId=" + int.Parse(pid); DataTable dt = DBHelper.GetDataTable(sql); liDiscountPrice.Text = (Convert.ToDecimal(dt.Rows[0]["price"]) * Convert.ToDecimal(dt.Rows[0]["discount"]) / 10).ToString(); imgProduct.ImageUrl = dt.Rows[0]["imageUrl"].ToString(); imgProduct.ToolTip = dt.Rows[0]["productName"].ToString(); liProductId.Text = dt.Rows[0]["productId"].ToString(); liPrice.Text = dt.Rows[0]["price"].ToString(); liProductName.Text = dt.Rows[0]["productName"].ToString(); liProductNum.Text = dt.Rows[0]["productNum"].ToString(); //绑定超链接 aBuy.HRef = "Cart.aspx?PID=" + dt.Rows[0]["productId"].ToString(); } } protected void rpCommentsBinds() { String sql = "select * from t_Feedback where productid=" +Convert.ToInt32(ViewState["pid"])+" order by id desc"; rpComments.DataSource= DBHelper.GetDataTable(sql); rpComments.DataBind(); } /// <summary> /// 提交评论 /// </summary> protected void btnSubmit_Click(object sender, EventArgs e) { if (ViewState["pid"]!=null) { String sql = "insert into t_Feedback values (@productid,@name,@title,@message)"; SqlParameter[] paramter = { new SqlParameter("@productid",Convert.ToInt32(ViewState["pid"])), new SqlParameter("@name",txtName.Value), new SqlParameter("@title",txtTitle.Value), new SqlParameter("@message",txtMessage.Value) }; if(DBHelper.ExecuteCommand(sql,paramter)>0) { //Response.Write("<script>alert('提交成功!');</script>"); Page.ClientScript.RegisterStartupScript(this.GetType(), "msg", "alert('提交成功!');",true); //重绑定 rpCommentsBinds(); } } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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"); } }