您的位置:首页 > 其它

购物车设计

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");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: