专注于.Net

享受编程的乐趣
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

asp.net 实现购物车详细代码

Posted on 2008-08-01 22:29  古道飘零客  阅读(3065)  评论(1编辑  收藏  举报
<%@ 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" />

<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" );
        }
    }