asp.net实现购物车 (转)

<%@ Page language="c#" Codebehind="shoppingcart.aspx.cs" AutoEventWireup="false" Inherits="myshop.shoppingcart" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
  <title>shoppingcart</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <LINK href="mycss.css" type="text/css" rel="stylesheet">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
 <body>
  <center>
   <form id="Form1" runat="server">
    <table width="500" border="0" cellspacing="0" cellpadding="0">
     <tr>
      <td>
       <ASP:DataGrid id="ShoppingCartDlt" runat="server" Width="500" BackColor="white" BorderColor="black"
        ShowFooter="false" CellPadding="3" CellSpacing="0" Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#cecfd6"
        AutoGenerateColumns="false" MaintainState="true">
        <Columns>
         <asp:TemplateColumn HeaderText="删除">
          <ItemTemplate>
           <center>
            <asp:CheckBox id="chkProductID" runat="server" />
           </center>
          </ItemTemplate>
         </asp:TemplateColumn>
         <asp:BoundColumn DataField="ProdID" HeaderText="ID" />
         <asp:BoundColumn DataField="ProName" HeaderText="商品名称" />
         <asp:BoundColumn DataField="UnitPrice" HeaderText="单价" />
         <asp:TemplateColumn HeaderText="数量">
          <ItemTemplate>
           <asp:TextBox id="CountTb" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"ProdCount")%>'>
           </asp:TextBox>
          </ItemTemplate>
         </asp:TemplateColumn>
         <asp:BoundColumn DataField="TotalPrice" HeaderText="小计(元)" />
        </Columns>
       </ASP:DataGrid></td>
     </tr>
    </table>
    <br>
    <table width="500" border="0" cellspacing="0" cellpadding="0">
     <tr>
      <td><asp:Button id="update" runat="server" Text="更新我的购物车"  CssClass="button2" /></td>
      <td><asp:Button id="CheckOut" runat="server" Text="结算"  CssClass="button5" />&nbsp;&nbsp;<input type="button" name="close2" value="继续购物" onClick="window.close();return false;"
        class="button2"></td>
      <td align="right"><br>
       <asp:Label id="label" runat="server" Width="100px" Visible="True" ForeColor="#FF8080" Height="18px"></asp:Label></td>
     </tr>
    </table>
   </form>
  </center>
 </body>
</HTML>
=======================================================================================
以上为HTML页面部分
==========================================================================================


using System;
using System.Collections;
using System.ComponentModel;
using System.Web.SessionState;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.OleDb;
using System.Configuration;

namespace myshop
{
 /// <summary>
 /// shoppingcart 的摘要说明。
 /// </summary>
 public class shoppingcart : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.DataGrid ShoppingCartDlt;
  protected System.Web.UI.WebControls.Button update;
  protected System.Web.UI.WebControls.Button CheckOut;
  protected System.Web.UI.HtmlControls.HtmlForm Form1;
  protected System.Web.UI.WebControls.Label label;
  protected System.Web.UI.WebControls.CheckBox     chkProductID;
  protected System.Web.UI.WebControls.TextBox      txtCount;
  protected System.Web.UI.WebControls.TextBox      CountTb;
  string AddProID;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   try
   {
    if (Session["logon"]!="yes"||Session["username"]==null)
    {
     Response.Redirect("error.htm") ;
    }
   }
   catch
   {
    Response.Redirect("error.htm") ;
   }                                         /////////////查看用户是否已经登陆。

   if(!IsPostBack)
   {
    if(Request.Params["mode"]=="view")         //检测是否为直接查看购物车。
    {
     ViewShoppingCart();
     Caculator();
    }
    if(Request.Params["productID"]!=null||Request.Params["productID"]!="")
    {
     AddProID=Request["productID"];
     UpdateShoppingCart();
     Caculator();
    }
   }// 在此处放置用户代码以初始化页面
  }

  public void CreateCartTable()   //创建购物车
  { 
   DataSet ds = new DataSet();
   DataTable newDT=new DataTable("CartTable");
   ds.Tables.Add(newDT);
   DataColumn newDC;
   newDC=new DataColumn("ProdID",System.Type.GetType("System.Int32"));
   ds.Tables["CartTable"].Columns.Add(newDC);

   newDC=new DataColumn("ProdCount",System.Type.GetType("System.Int32"));
   newDC.DefaultValue=1;
   ds.Tables["CartTable"].Columns.Add(newDC);

   newDC=new DataColumn("ProName",System.Type.GetType("System.String"));
   ds.Tables["CartTable"].Columns.Add(newDC);

   newDC=new DataColumn("UnitPrice",System.Type.GetType("System.Double"));
   ds.Tables["CartTable"].Columns.Add(newDC);
             
   newDC=new DataColumn("TotalPrice",System.Type.GetType("System.Double"));
   ds.Tables["CartTable"].Columns.Add(newDC);

   newDC=new DataColumn("IsDeleted",System.Type.GetType("System.Int32"));
   newDC.DefaultValue=0;                                                    //  public void WriteShoppingCart() 中 newDR[5]="0"; 行,已被注销,
   ds.Tables["CartTable"].Columns.Add(newDC);

   Session["myCartTable"]=newDT;
   ShoppingCartDlt.DataSource=ds.Tables["CartTable"].DefaultView;
   ShoppingCartDlt.DataBind();
      
  }

  public void UpdateShoppingCart()
  {
   if(Session["myCartTable"]==null)//Session["myCartTable"]==null
   {
    CreateCartTable();                                    //调用函数CreateCartTable()新建一个DataTable
    WriteShoppingCart();


   }
   else
   {                                                         //如果购物蓝中已有商品,则需要对购物信息表DataTable进行更新,并将其棒定到ShoppingCartDlt
                 
    WriteShoppingCart();
   }
  }

  public void ViewShoppingCart()                               //查看购物车
  {
   if(Session["myCartTable"]!=null)
   {
    DataTable viewTable=new DataTable("nowCartTable");
    viewTable=(DataTable)Session["myCartTable"];
    ShoppingCartDlt.DataSource = viewTable.DefaultView;         //购物车棒定到ShoppingCartDlt
    ShoppingCartDlt.DataBind();
   }
             
  }

  public void WriteShoppingCart()
  {
   if(Request.Params["mode"]!="view")                             //检查是否是直接查看购物车,如果直接查看,就不再写MYCARTTABLE
   {
    DataTable nowTable=new DataTable("nowCartTable");
    nowTable=(DataTable)Session["myCartTable"];
    int pn=nowTable.Rows.Count;

    int i=0;
    bool hasone=false;
    int nowProdID;
                 
    while(i<pn && !hasone)
    {
     nowProdID=Int32.Parse(nowTable.Rows[i][0].ToString());
     if(nowProdID==Int32.Parse(AddProID))                                   //判断购物信息表中,是否存有当前放入商品。 if(nowProdID==Int32.Parse(AddProID))
     {
      hasone=true;
     }
     else
     {
      i++;
     }

    }
    if(hasone)                          
    {                                                      //如果已有该商品,则 hasone=true,更改该数据行
     DataRow oldDR;
     oldDR=nowTable.Rows[i];
     oldDR["ProdCount"]=Int32.Parse(oldDR["ProdCount"].ToString())+1;
     oldDR["TotalPrice"]=Int32.Parse(oldDR["ProdCount"].ToString())*Double.Parse(oldDR["UnitPrice"].ToString());
    }
    else
    {                                                      //如果没有该商品,在表中新加如一行。
     DataRow newDR;
     double unitp;
     String strcon="provider=Microsoft.jet.OLEDB.4.0;data Source="+Server.MapPath(ConfigurationSettings.AppSettings["MDBpath2"])+";";
     OleDbConnection myConnection = new OleDbConnection(strcon);
     string strSQL= "select *  from pro where product_id="+AddProID+"";
     OleDbDataAdapter myCommand = new  OleDbDataAdapter(strSQL, myConnection);
     DataSet ds = new DataSet();
     myCommand.Fill(ds, "AddP");

     newDR=nowTable.NewRow();
     newDR[0]=AddProID;
                       
     newDR[2]=ds.Tables["Addp"].Rows[0]["product_name"].ToString();
     unitp=Double.Parse(ds.Tables["AddP"].Rows[0]["product_memprice"].ToString());        //会员价
                      
     newDR[3]=unitp;
     newDR[4]=unitp;                                           //第一次读库,所以总价格和单价是一样的。
     //newDR[5]="0";
     nowTable.Rows.Add(newDR);
                
     myConnection.Close();
                    
    }
                 
    ShoppingCartDlt.DataSource = nowTable.DefaultView;         //将更新后的 DataTable棒定到ShoppingCartDlt
    ShoppingCartDlt.DataBind();

    Session["myCartTable"] = nowTable; 
    //重新保存更新过的DataTable
   }   
  }

  
  
  public void Caculator()
  {
   if(Session["myCartTable"]!=null)                         //购物车是否为空
   {
    int h;
    Double TotalPri;
    TotalPri=0;
    DataTable nowTable3=new DataTable("nowCartTable3");
    nowTable3=(DataTable)Session["myCartTable"];
    if(nowTable3.Rows.Count>0)                               //返回购物车中是否有货物
    {
     for(h=0;h<=nowTable3.Rows.Count-1;h++)
     {       
      TotalPri=TotalPri+Int32.Parse(nowTable3.Rows[h][4].ToString());//Double.Parse((string)TotalText.Text);
                                        
     }
     label.Text="总计: "+TotalPri.ToString()+" 元" ;
    }
   }
  
  }

  public void Update()
  {
   
   int i;
   int j;
   int k;
   ArrayList deleteItem = new ArrayList(10);
   DataGridItem _item ;
   j=0;
   int deleteid;
     
            
   k=0;
   DataTable nowTable2=new DataTable("nowCartTable2");
   nowTable2=(DataTable)Session["myCartTable"];
    
           
   
   
   
   for(i=0;i<=this.ShoppingCartDlt.Items.Count-1;i++)
   {
    _item = this.ShoppingCartDlt.Items[i];
    TextBox CountText=(TextBox)this.ShoppingCartDlt.Items[i].Cells[4].FindControl("CountTb");//Controls[1];//_item.FindControl("CountTb");
    CheckBox ProductIDCheck =(CheckBox) _item.FindControl("chkProductID");
    
    nowTable2.Rows[i][1] = Int32.Parse(CountText.Text.ToString());
    nowTable2.Rows[i][4] = Int32.Parse(nowTable2.Rows[i][1].ToString()) * Double.Parse(nowTable2.Rows[i][3].ToString());

    if(ProductIDCheck.Checked)
    {
     nowTable2.Rows[i][5] = 1;//添加删除标记1
     j=j+1;
    }
    
   }
   string strExpr="IsDeleted>0";                     //http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfSystemDataDataTableClassSelectTopic.asp
   DataRow[] foundRows = nowTable2.Select(strExpr);
   for(int m = 0; m < foundRows.Length; m ++)
   {
    //Console.WriteLine(foundRows[i][0]);
    foundRows[m].Delete();
   }
          
            
             
                              
   
   ShoppingCartDlt.DataSource = nowTable2.DefaultView;       
   ShoppingCartDlt.DataBind();
   Session["myCartTable"] = nowTable2;
   Caculator();

  }

  #region web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 asp.NET web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.update.Click += new System.EventHandler(this.update_Click);
   this.CheckOut.Click += new System.EventHandler(this.CheckOut_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  private void update_Click(object sender, System.EventArgs e)
  {
   Update();
  
  }

  private void CheckOut_Click(object sender, System.EventArgs e)
  {
   Update();
   Response.Redirect("checkout.aspx");
  }
 }
}

posted @ 2010-06-20 19:53  zhdonghu  阅读(256)  评论(0编辑  收藏  举报