您的位置:首页 > 编程语言 > ASP

一个购物车的简单实现(多层开发)

2006-03-03 12:37 531 查看
代码如下......

CCookieShoppingCart.cs //用 cookie


using System;


using System.Web;


using System.Collections;




namespace ShoppingCartGeneric






{


public class CCookieShoppingCart:IShoppingCart






{




public int Add(string cartid, IShoppingCartItem item)






{


HttpCookie c=null;


if(HttpContext.Current.Request.Cookies["shoppingcart"]==null)


c=new HttpCookie("shoppingcart");


else


c=HttpContext.Current.Request.Cookies["shoppingcart"];


string itemdetails;


itemdetails=item.ProductID + "|" + item.ProductName + "|" + item.UnitPrice;


c.Values[item.ProductID.ToString()]=itemdetails;


HttpContext.Current.Response.Cookies.Add(c);


r
20000
eturn 1;


}




public int Remove(string cartid, IShoppingCartItem item)






{


HttpCookie c=HttpContext.Current.Request.Cookies["shoppingcart"];


c.Values.Remove(item.ProductID.ToString());


HttpContext.Current.Response.Cookies.Add(c);


return 1;


}




public ArrayList GetItems(string cartid)






{


HttpCookie c=HttpContext.Current.Request.Cookies["shoppingcart"];


ArrayList items=new ArrayList();




for(int i=0;i<c.Values.Count;i++)






{


string[] vals=c.Values[i].Split('|');


CShoppingCartItem item=new CShoppingCartItem();


item.ProductID=int.Parse(vals[0]);


item.ProductName=vals[1];


item.UnitPrice=decimal.Parse(vals[2]);


item.Quantity=1;




items.Add(item);


}


return items;


}




}


}



CDatabaseShoppingCart.cs //用数据库


using System;


using System.Data;


using System.Data.SqlClient;


using System.Collections;




namespace ShoppingCartGeneric






{


public class CDatabaseShoppingCart:IShoppingCart






{


private static string connstr=@"data source=./vsdotnet;initial catalog=northwind;user id=sa";




public int Add(string cartid, IShoppingCartItem item)






{


SqlConnection cnn=new SqlConnection(connstr);


SqlCommand cmd=new SqlCommand();


cmd.Connection=cnn;


cmd.CommandText="insert into ShoppingCart_Products(cartid,productid,productname,unitprice,quantity) values(@cartid,@prodid,@prodname,@unitprice,@qty)";




SqlParameter p1=new SqlParameter("@cartid",cartid);


SqlParameter p2=new SqlParameter("@prodid",item.ProductID);


SqlParameter p3=new SqlParameter("@prodname",item.ProductName);


SqlParameter p4=new SqlParameter("@unitprice",item.UnitPrice);


SqlParameter p5=new SqlParameter("@qty",item.Quantity);




cmd.Parameters.Add(p1);


cmd.Parameters.Add(p2);


cmd.Parameters.Add(p3);


cmd.Parameters.Add(p4);


cmd.Parameters.Add(p5);




cnn.Open();


cmd.ExecuteNonQuery();


cnn.Close();




return 0;


}




public void UpdateQuantity(string cartid,int productid,int newqty)






{


SqlConnection cnn=new SqlConnection(connstr);


SqlCommand cmd=new SqlCommand();


cmd.Connection=cnn;


cmd.CommandText="update ShoppingCart_Products set quantity=@qty where cartid=@cartid and productid=@prodid";




SqlParameter p1=new SqlParameter("@qty",newqty);


SqlParameter p2=new SqlParameter("@cartid",cartid);


SqlParameter p3=new SqlParameter("@prodid",productid);




cmd.Parameters.Add(p1);


cmd.Parameters.Add(p2);


cmd.Parameters.Add(p3);




cnn.Open();


cmd.ExecuteNonQuery();


cnn.Close();




}




public int Remove(string cartid, IShoppingCartItem item)






{


SqlConnection cnn=new SqlConnection(connstr);


SqlCommand cmd=new SqlCommand();


cmd.Connection=cnn;


cmd.CommandText="delete from ShoppingCart_Products where cartid=@cartid and productid=@prodid";




SqlParameter p1=new SqlParameter("@cartid",cartid);


SqlParameter p2=new SqlParameter("@prodid",item.ProductID);




cmd.Parameters.Add(p1);


cmd.Parameters.Add(p2);




cnn.Open();




cmd.ExecuteNonQuery();




cnn.Close();


return 0;


}




public System.Collections.ArrayList GetItems(string cartid)






{


SqlDataAdapter da=new SqlDataAdapter("select * from ShoppingCart_Products where cartid='" + cartid + "'",connstr);


DataSet ds=new DataSet();


da.Fill(ds,"shoppingcart");




ArrayList arr=new ArrayList();


foreach(DataRow row in ds.Tables[0].Rows)






{


CShoppingCartItem item=new CShoppingCartItem();


item.ProductID=(int)row["productid"];


item.ProductName=(String)row["productname"];


item.Quantity=(int)row["quantity"];


item.UnitPrice=(Decimal)row["unitproce"];


arr.Add(item);


}


return arr;


}




}


}



CSessionShoppingCart.cs //用 session


using System;


using System.Collections;


using System.Web;




namespace ShoppingCartGeneric






{




/**//// <summary>


/// Summary description for CSessionShoppingCart.


/// </summary>


public class CSessionShoppingCart:IShoppingCart






{




public int Add(string cartid, IShoppingCartItem item)






{


ArrayList arr;


if(HttpContext.Current.Session["mycart"]!=null)






{


arr=(ArrayList)HttpContext.Current.Session["mycart"];


}


else






{


arr=new ArrayList();


HttpContext.Current.Session["mycart"]=arr;


}


arr.Add(item);


return 0;


}




public int Remove(string cartid, IShoppingCartItem item)






{


ArrayList items=(ArrayList)HttpContext.Current.Session["mycart"];


for(int i=0;i<items.Count;i++)






{


if(((IShoppingCartItem)items[i]).ProductID==item.ProductID)






{


items.RemoveAt(i);


break;


}


}


return 0;


}




public System.Collections.ArrayList GetItems(string cartid)






{


return (ArrayList)HttpContext.Current.Session["mycart"];


}


}


}



CShoppingCart.cs //基类


using System;




namespace ShoppingCartGeneric






{


public enum CShoppingCartType






{


Cookie,Session,Database


}




public class CShoppingCart:IShoppingCart






{


private IShoppingCart cart=null;




public CShoppingCart(CShoppingCartType type)






{


switch(type)






{


case CShoppingCartType.Cookie:


cart=new CCookieShoppingCart();


break;


case CShoppingCartType.Session:


cart=new CSessionShoppingCart();


break;


case CShoppingCartType.Database:


cart=new CDatabaseShoppingCart();


break;


}


}




public int Add(string cartid, IShoppingCartItem item)






{


return cart.Add(cartid,item);


}




public int Remove(string cartid, IShoppingCartItem item)






{


return cart.Remove(cartid,item);


}




public System.Collections.ArrayList GetItems(string cartid)






{


return cart.GetItems(cartid);


}




}


}



IShoppingCart.cs 接口


using System;




namespace ShoppingCartGeneric






{


public class CShoppingCartItem:IShoppingCartItem






{


private int intProductID;


private string strProductName;


private decimal decUnitPrice;


private int intQuantity;




public int ProductID






{


get






{


return intProductID;


}


set






{


intProductID=value;


}


}




public string ProductName






{


get






{


return strProductName;


}


set






{


strProductName=value;


}


}




public decimal UnitPrice






{


get






{


return decUnitPrice;


}


set






{


decUnitPrice=value;


}


}




public int Quantity






{


get






{


return intQuantity;


}


set






{


intQuantity=value;


}


}




}


}



productcatalog.aspx.cs //调用页 用户选择

cart.Add(Session.SessionID,item);

//这个 Session.SessionID 不知道作者为什么加这个,,在客个基类中都没有调用...
你把它改成其它的.也一样正常执行.......
可能是多用户时用 session 类时,用它作用户判断确定唯一性,可是我查过资料,每个 session 生成时都有一个唯一的 sessionid 啊......清楚的朋友谈谈......


using System;


using System.Collections;


using System.ComponentModel;


using System.Data;


using System.Drawing;


using System.Web;


using System.Web.SessionState;


using System.Web.UI;


using System.Web.UI.WebControls;


using System.Web.UI.HtmlControls;


using System.Data.SqlClient;


using System.Security.Principal;




namespace ShoppingCartGeneric






{


public class WebForm1 : System.Web.UI.Page






{


protected System.Web.UI.WebControls.Button Button1;


protected System.Web.UI.WebControls.DataGrid DataGrid1;




private void Page_Load(object sender, System.EventArgs e)






{


if(!Page.IsPostBack)






{


BindGrid();


}


}






private void BindGrid()






{


SqlDataAdapter da=new SqlDataAdapter("select * from products",@"data source=./vsdotnet;initial catalog=northwind;user id=sa");


DataSet ds=new DataSet();


da.Fill(ds,"products");




DataGrid1.DataSource=ds;


DataGrid1.DataBind();


}






Web Form Designer generated code#region Web Form Designer generated code


override protected void OnInit(EventArgs e)






{


//


// CODEGEN: This call is required by the ASP.NET Web Form Designer.


//


InitializeComponent();


base.OnInit(e);


}






/**//// <summary>


/// Required method for Designer support - do not modify


/// the contents of this method with the code editor.


/// </summary>


private void InitializeComponent()






{


this.DataGrid1.SelectedIndexChanged += new System.EventHandler(this.DataGrid1_SelectedIndexChanged);


this.Button1.Click += new System.EventHandler(this.Button1_Click);


this.Load += new System.EventHandler(this.Page_Load);




}


#endregion




private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)






{


CShoppingCart cart=new CShoppingCart(CShoppingCartType.Cookie);


CShoppingCartItem item=new CShoppingCartItem();


item.ProductID=int.Parse(DataGrid1.SelectedItem.Cells[1].Text);


item.ProductName=DataGrid1.SelectedItem.Cells[2].Text;


item.UnitPrice=decimal.Parse(DataGrid1.SelectedItem.Cells[3].Text);


item.Quantity=1;




cart.Add(Session.SessionID,item);


}




private void Button1_Click(object sender, System.EventArgs e)






{


Response.Redirect("cart.aspx");


}


}


}




<%

@ Page language="c#" Codebehind="productcatalog.aspx.cs" AutoEventWireup="false" Inherits="ShoppingCartGeneric.WebForm1" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >


<HTML>


<HEAD>


<title>WebForm1</title>


<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">


<meta name="CODE_LANGUAGE" Content="C#">


<meta name="vs_defaultClientScript" content="JavaScript">


<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">


</HEAD>


<body MS_POSITIONING="GridLayout">


<form id="Form1" method="post" runat="server">


<asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 24px; POSITION: absolute; TOP: 72px" runat="server"


BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="4"


AutoGenerateColumns="False" Width="448px">


<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>


<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>


<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>


<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>


<Columns>


<asp:ButtonColumn Text="Select" CommandName="Select"></asp:ButtonColumn>


<asp:BoundColumn DataField="productid" HeaderText="Product ID"></asp:BoundColumn>


<asp:BoundColumn DataField="productname" HeaderText="Product Name"></asp:BoundColumn>


<asp:BoundColumn DataField="unitprice" HeaderText="Unit Price"></asp:BoundColumn>


<asp:ButtonColumn Text="Select" CommandName="Select"></asp:ButtonColumn>


</Columns>


<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>


</asp:DataGrid><asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 200px; POSITION: absolute; TOP: 32px" runat="server"


Text="Show Cart"></asp:Button>


</form>


</body>


</HTML>



//购物车


using System;


using System.Collections;


using System.ComponentModel;


using System.Data;


using System.Drawing;


using System.Web;


using System.Web.SessionState;


using System.Web.UI;


using System.Web.UI.WebControls;


using System.Web.UI.HtmlControls;




namespace ShoppingCartGeneric






{




/**//// <summary>


/// Summary description for cart.


/// </summary>


public class cart : System.Web.UI.Page






{


protected System.Web.UI.WebControls.Button Button1;


protected System.Web.UI.WebControls.Button Button2;


protected System.Web.UI.WebControls.Label Label3;


protected System.Web.UI.WebControls.Label lblAmt;


protected System.Web.UI.WebControls.DataGrid DataGrid1;




private void Page_Load(object sender, System.EventArgs e)






{


if(!Page.IsPostBack)






{


FillCartFromSession();


}


}




private void FillCartFromSession()






{


CShoppingCart cart=new CShoppingCart(CShoppingCartType.Cookie);


ArrayList items=(ArrayList)cart.GetItems(Session.SessionID);


DataGrid1.DataSource=items;


DataGrid1.DataBind();


Button1_Click(null,null);


}






Web Form Designer generated code#region Web Form Designer generated code


override protected void OnInit(EventArgs e)






{


//


// CODEGEN: This call is required by the ASP.NET Web Form Designer.


//


InitializeComponent();


base.OnInit(e);


}






/**//// <summary>


/// Required method for Designer support - do not modify


/// the contents of this method with the code editor.


/// </summary>


private void InitializeComponent()






{


this.DataGrid1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);


this.DataGrid1.SelectedIndexChanged += new System.EventHandler(this.DataGrid1_SelectedIndexChanged);


this.Button1.Click += new System.EventHandler(this.Button1_Click);


this.Button2.Click += new System.EventHandler(this.Button2_Click);


this.Load += new System.EventHandler(this.Page_Load);




}


#endregion




private void Button1_Click(object sender, System.EventArgs e)






{


decimal total=0;




try






{


foreach(DataGridItem dgi in DataGrid1.Items)






{


if(dgi.ItemType==ListItemType.Item || dgi.ItemType==ListItemType.AlternatingItem)






{


TextBox t=(TextBox)dgi.Cells[3].Controls[1];


int quantity=int.Parse(t.Text);


decimal unitprice=Decimal.Parse(dgi.Cells[2].Text);


total=total + (unitprice * quantity);




//************************


//Only for database shopping cart


//IShoppingCart cart=new CShoppingCart(CShoppingCartType.Database);


//((CDatabaseShoppingCart)cart).UpdateQuantity(Session.SessionID,int.Parse(dgi.Cells[0].Text),quantity);


//************************


}


}


}


catch






{


}




lblAmt.Text=total.ToString();


}




private void Button2_Click(object sender, System.EventArgs e)






{


//now you can iterate through cookies collection


//and DataGrid and get details of all items


//then add your code here to insert into database


}




private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)






{


CShoppingCart cart=new CShoppingCart(CShoppingCartType.Cookie);


CShoppingCartItem item=new CShoppingCartItem();


item.ProductID=int.Parse(e.Item.Cells[0].Text);


cart.Remove(Session.SessionID,item);


FillCartFromSession();


}




private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)






{




}


}


}






<%

@ Page language="c#" Codebehind="cart.aspx.cs" AutoEventWireup="false" Inherits="ShoppingCartGeneric.cart" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >


<HTML>


<HEAD>


<title>cart</title>


<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">


<meta name="CODE_LANGUAGE" Content="C#">


<meta name="vs_defaultClientScript" content="JavaScript">


<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">


</HEAD>


<body>


<form id="Form1" method="post" runat="server">


<TABLE id="Table1" cellSpacing="1" cellPadding="1" width="100%" border="0">


<TR>


<TD><asp:DataGrid id="DataGrid1" runat="server" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px"


BackColor="White" CellPadding="4" AutoGenerateColumns="False" Width="100%">


<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>


<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>


<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>


<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>


<Columns>


<asp:BoundColumn DataField="productid" HeaderText="Product ID"></asp:BoundColumn>


<asp:BoundColumn DataField="productname" HeaderText="Product Name"></asp:BoundColumn>


<asp:BoundColumn DataField="unitprice" HeaderText="Unit Price"></asp:BoundColumn>


<asp:TemplateColumn HeaderText="Quantity">


<ItemTemplate>


<asp:TextBox id=TextBox2 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.quantity") %>' Columns="3">


</asp:TextBox>


</ItemTemplate>


<EditItemTemplate>


<asp:TextBox id=TextBox1 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.quantity") %>'>


</asp:TextBox>


</EditItemTemplate>


</asp:TemplateColumn>


<asp:ButtonColumn Text="Delete" CommandName="Delete"></asp:ButtonColumn>


</Columns>


<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>


</asp:DataGrid></TD>


</TR>


<TR>


<TD align="center"><asp:Label id="Label3" runat="server" Font-Bold="True">Total Amount :</asp:Label><asp:Label id="lblAmt" runat="server" Font-Bold="True"></asp:Label></TD>


</TR>


<TR>


<TD align="center"><asp:Button id="Button1" runat="server" Text="Recalculate"></asp:Button></TD>


</TR>


<TR>


<TD align="center"><asp:Button id="Button2" runat="server" Text="Place Order"></asp:Button></TD>


</TR>


</TABLE>


</form>


</body>


</HTML>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐