首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Profile兑现购物车(应用Profile)(转)

2012-12-24 
Profile实现购物车(应用Profile)(转)上面我已经介绍过了Profile的配置和简单应用了,如果大家上面没有学会

Profile实现购物车(应用Profile)(转)

上面我已经介绍过了Profile的配置和简单应用了,如果大家上面没有学会的话下面我在来做一下高级一点的应用,我会从一开始创建数据库与配置一步一步地在说一遍:

?

这们要完成一个这样的功能:一个购物车,能添加商品和删除商品的操作

?要一个描述商品的类(ShopInfo.cs),一个购物车类(ShopCart.cs),和一个页面显示商品信息(default.aspx)

?

?

1.?????? 这次我们先来创建数据库

在这个路径下:C:"WINDOWS"Microsoft.NET"Framework"v2.0.50727

v2.0.50727是跟据你的版本号解定的文件夹

这个下面有一个aspnet_regsql.exe进行运行-à配置指定的数据库

Aspnet_regsql.exe-à下一步-à下一步------à你的服务器的名字,用什么身份进行登录,可以在这里选择指定的数据库

这样就可以在指定的数据库中自动生成profile与登录控件要用的表了

?

2.?????? 项目中在web.config中配置文件中配置 配置节

?2.1数据连接字符串

<connectionStrings>

???? <add name="KuConnectionString" connectionString="Data Source=localhost;Initial Catalog=ku;Integrated Security=True" providerName="System.Data.SqlClient"/>

</connectionStrings>

2.2 配置profile配置节

???????? <profile defaultProvider="MySqlProfileProvider">

????????????? <providers>

?????????????????? <add name="MySqlProfileProvider" connectionStringName="KuConnectionString" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

????? </providers>

????? <properties>

??????? <add name="userName" type="system.string" serializeAs="Binary"/>

??????? <add name="cartShop" type="ShopInfo" serializeAs="Binary"/>

????? </properties>

???????? </profile>

?? </system.web>

解释:

第一个<properties>配置节

defaultProvider="MySqlProfileProvider"?为当前默认的<Profile>中的配置这里用的

是我们自己配置的MySqlProfileProvider

connectionStringName="KuConnectionString"为2.1中的name(是数据库连接字符串的name)

下一个<properties>

<add name="userName" type="system.string" serializeAs="Binary"/>//type 为指定的类型serializeAs="Binary"以什么类型存储(这里用的是以二进制存储)

<add name="cartShop" type="ShopCart" serializeAs="Binary"/>

这个type是我们要用到的购物车类名为这个类的类型,以二进制进行存储

?

3.?????? 上面的是准备工作已经做好了那就开始做我们要实现的功能吧

3.1一个描述商品的一个类:ShopInfo.cs 这个类中只有一些商品的属性与它的get,set方法

代码:

using System;

using System.Data;

using System.Configuration;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

[Serializable]

/// <summary>

///ShopInfo 的摘要说明

/// </summary>

public class ShopInfo

{

??? private int _ID;//ID 商品的

??? public int ID

??? {

??????? get { return _ID; }

??????? set { _ID = value; }

??? }

??? private string _Name;//Name 商品的名字

??? public string Name

??? {

??????? get { return _Name; }

??????? set { _Name = value; }

??? }

??? private decimal _Price;//Price 商品的价格

??? public decimal Price

??? {

??????? get { return _Price; }

??????? set { _Price = value; }

??? }

??? private int _Count = 1;//Count 商品的数量

?

??? public int Count

??? {

??????? get { return _Count; }

??????? set { _Count = value; }

??? }

//构造方法

??? public ShopInfo(int id,string name,decimal price) {

??????? _ID = id;

??????? _Name = name;

??????? _Price = price;

??? }

}

3.2一个描述购物车类:ShopCart.cs 这个类中是用来操作买商品与删除商品一系列的操作,这里我们用的是hashTable进行存储商品数据的

代码:

using System;

using System.Data;

using System.Configuration;

using System.Web.Security;

using System.Collections;

[Serializable]

/// <summary>

///ShopCart 的摘要说明

/// </summary>

public class ShopCart

{

???? private Hashtable _HashShopCart = new Hashtable();

???? public ICollection HashShopCart

???? {

??????? get

??????? {

??????????? return _HashShopCart.Values;

??????? }

???? }

???? //获取总价钱的属性

???? public decimal Total

???? {

???????? get

???????? {

???????????? decimal sum = 0;

???????????? foreach(ShopInfo shop in this.HashShopCart){

???????????????? sum += shop.Count * shop.Price;

???????????? }

???????????? return sum;?

???????? }

???? }

???? //添加方法

???? public void ADDShop(int id,string name,decimal price)

???? {?

??????? ShopInfo shopItem = (ShopInfo)_HashShopCart[id];//_HashShopCart[id];

??????? //1.购物车中是否有这个数据有就Count++

??????? if(shopItem != null){

?????????? shopItem.Count++;

?????????? _HashShopCart[id] = shopItem;

??????? }

??????? else //2.没有就添加

??????? {

?????????? _HashShopCart.Add(id,new ShopInfo(id,name,price));

??????? }

??? }

?

??? //删除一个商品的方法

??? public void Remove(int id)

??? {

???????? ShopInfo shopItem =(ShopInfo) _HashShopCart[id];

???????? //1.判断有这件商品

???????? if (shopItem == null)

???????? {

??????????? return;

???????? }

???????? shopItem.Count--;

???????? //2.减完看看数量是否为0 如果为0就删除这个

???????? if(shopItem.Count <= 0)

???????? {

????????????? _HashShopCart.Remove(id);

???????? }

??? }??

}??

4.?????? 所有的都写好了现在就差显示页面了

一个显示商品的页面default.aspx

?? 这里的数据我就不写了大致是:商品id,商品名,商品价格

?? 之后呢,我用的是GridView控件显示的,要在显示控件上加一个选择按钮,把这个文本改成‘购买‘ 要用这个选择按钮的选择事件:SelectedIndexChanged 在这个事件中写上:

获取选中行的数据;

int id = int.Parse(gvGoodsInfo.SelectedDataKey.Value.ToString());

??????? string name = gvGoodsInfo.SelectedRow.Cells[1].Text;

??????? string prices = gvGoodsInfo.SelectedRow.Cells[2].Text;

??????? decimal price = decimal.Parse(prices);

??????? //开始放到Profile中(如果上面没有问题的话那你的数据库中就有选择的这些数据了)

??????? Profile.shopCart.ADDShop(id, name, price);

??????? BindShopCart();

非常简单吧:

还可以取出邦定到其它的控件就行显示如:

??? private void BindShopCart()

??? {

??????? if (Profile.shopCart == null)

??????? {

??????????? Profile.shopCart = new ShopCart();

??????? }

??????? gvShopCart.DataSource = Profile.shopCart.HashShopCart;

??????? gvShopCart.DataBind();???????

}

在这个GridView控件上也加一个选择按钮进行删除商品的操作:

?protected void gvShopCart_SelectedIndexChanged(object sender, EventArgs e)

??? {

??????? //gvShopCart的选择事件(删除商品)

??????? string id = this.gvShopCart.SelectedDataKey.Value.ToString();

??????? Profile.shopCart.Remove(int.Parse(id));

??????? this.BindShopCart();

}

?

这样一个简单的购物车就完成了,上面的还有很多功能不完善,希望你们自己去完善一下。

虽然购物车已经实现了,但只能是一个匿名用户的购物车,如果是一个登录用户那用的时候只能是购买一件商品了,这样肯定是不行的,那要怎样解决它呢,下次介绍一下<membership> 的配置与登录控件的一些操作。使用登录控件就可以轻松的解决了上诉的问题了

热点排行