购物车设计

购物车设计(一)
购物车设计(一)登陆页面

————————————————————————————————

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();
            }
        }
    }
}
购物车设计(二)
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");
    }
}

 

posted @ 2012-06-25 09:20  ComBat  阅读(352)  评论(0编辑  收藏  举报