zoukankan      html  css  js  c++  java
  • 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> 的配置与登录控件的一些操作。使用登录控件就可以轻松的解决了上诉的问题了

     

    作者: 王春天
    出处: http://www.cnblogs.com/spring_wang/
    Email: spring_best@yeah.net
    QQ交流:903639067 
    QQ群:322581894 关于作者: 大连天翼信息科技有限公司 技术总监。 SNF快速开发平台 创始人。应用平台架构师、IT规划咨询专家、业务流程设计专家。 专注于快速开发平台的开发、代码生成器。同时专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,精通DotNet系列技术Vue、.NetCore、MVC、Webapi、C#、WinForm等,DB(SqlServer、Oracle等)技术,移动端开发。熟悉Java、VB及PB开发语言。在面向对象、面向服务以及数据库领域有一定的造诣。现从事项目实施、开发、架构等工作。并从事用友软件产品U8、U9、PLM 客开工作。 如有问题或建议,请多多赐教! 本文版权归作者和CNBLOGS博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ 联系我,非常感谢。
  • 相关阅读:
    MapReduce之Map Join
    MapReduce之Reduce Join
    MapReduce清洗日志数据统计PV量
    Hadoop MapReduce自定义数据类型
    ES6 对象拓展方法
    ES6箭头函数与this指向
    ES6参数默认值,剩余参数及展开数组
    ES6模板字符串及字符串的扩展方法
    浅谈ES6数组及对象的解构
    ECMAScript概述及浅谈const,let与块级作用域
  • 原文地址:https://www.cnblogs.com/spring_wang/p/1407306.html
Copyright © 2011-2022 走看看