在WebApplication中使用Profile做購物車功能。開發環境VS.NET 2008。
一Web.config文件配置
- <system.web>
- <anonymousIdentification enabled="true"/>
- <profile inherits="ShoppingCartTest.UserProfile">
- </profile>
- </system.web>
二UserProfile類
- using System.Web.Profile;
- using System.Web.Security;
- namespace ShoppingCartTest
- {
- public class UserProfile : ProfileBase
- {
- public static UserProfile GetUserProfile(string username)
- {
- return ((UserProfile)(ProfileBase.Create(username)));
- }
- public static UserProfile GetUserProfile()
- {
- string userName = System.Web.HttpContext.Current.User.Identity.Name;
- return Create(userName) as UserProfile;
- }
- public virtual ProfileShoppingCart ProfileShoppingCart
- {
- get
- {
- return ((ProfileShoppingCart)(this.GetPropertyValue("ProfileShoppingCart")));
- }
- set
- {
- this.SetPropertyValue("ProfileShoppingCart", value);
- }
- }
- }
- }
三ProfileShoppingCart類
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Data;
- namespace ShoppingCartTest
- {
- [Serializable]
- public class ProfileShoppingCart
- {
- public DataTable _CartItems = new DataTable("CartItems");
- public ProfileShoppingCart()
- {
- CreatTable();
- }
- // 返回購物車中所有的商品
- public DataTable CartItems
- {
- get { return _CartItems; }
- }
- // 計算購物車中所有商品的總價錢
- public decimal Total
- {
- get
- {
- decimal sum = 0;
- foreach (DataRow row in _CartItems.Rows)
- sum += Convert.ToDecimal(row["Price"].ToString()) * Convert.ToDecimal(row["Quantity"].ToString());
- return sum;
- }
- }
- // 添加商品到購物車
- public void AddItem(int ID, string Name, decimal Price)
- {
- if (_CartItems.Select("ID=" + ID).Length == 0)
- {
- DataRow row = _CartItems.NewRow();
- row["ID"] = ID;
- row["Name"] = Name;
- row["Price"] = Price;
- row["Quantity"] = 1;
- _CartItems.Rows.Add(row);
- }
- else
- {
- foreach (DataRow row in _CartItems.Select("ID=" + ID))
- {
- row["Quantity"] = Convert.ToDecimal(row["Quantity"].ToString()) + 1;
- }
- }
- }
- // 移除購物車中的商品
- public void RemoveItem(int ID)
- {
- if (_CartItems.Select("ID=" + ID).Length == 0)
- {
- return;
- }
- else
- {
- foreach (DataRow row in _CartItems.Select("ID=" + ID))
- {
- row["Quantity"] = Convert.ToDecimal(row["Quantity"].ToString()) - 1;
- if (Convert.ToDecimal(row["Quantity"].ToString()) == 0)
- {
- _CartItems.Rows.Remove(row);
- }
- }
- }
- }
- // 創建DataTable
- private void CreatTable()
- {
- _CartItems.Columns.Add("ID", typeof(int));
- _CartItems.Columns.Add("Name",typeof(string));
- _CartItems.Columns.Add("Price",typeof(decimal));
- _CartItems.Columns.Add("Quantity", typeof(decimal));
- }
- }
- }
四shopping.aspx代碼
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="shopping.aspx.cs" Inherits="ShoppingCartTest.shopping" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title></title>
- </head>
- <body>
- <form id="form1" runat="server">
- <table width="100%">
- <tr>
- <td valign="top">
- <h2>
- Products</h2>
- <asp:GridView ID="ProductGrid" DataSourceID="ProductSource" DataKeyNames="ProductID"
- AutoGenerateColumns="false" OnSelectedIndexChanged="AddCartItem" ShowHeader="false"
- CellPadding="5" runat="Server">
- <Columns>
- <asp:ButtonField CommandName="select" Text="Buy" />
- <asp:BoundField DataField="ProductName" />
- <asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}" />
- </Columns>
- </asp:GridView>
- <asp:SqlDataSource ID="ProductSource" ConnectionString="Server=localhost;Database=Northwind;Trusted_Connection=true;"
- SelectCommand="SELECT ProductID,ProductName,UnitPrice FROM Products" runat="Server" />
- </td>
- <td valign="top">
- <h2>
- Shopping Cart</h2>
- <asp:GridView ID="CartGrid" AutoGenerateColumns="false" DataKeyNames="ID" OnSelectedIndexChanged="RemoveCartItem"
- CellPadding="5" Width="300" runat="Server">
- <Columns>
- <asp:ButtonField CommandName="select" Text="Remove" />
- <asp:BoundField DataField="Name" HeaderText="Name" />
- <asp:BoundField DataField="Price" HeaderText="Price" DataFormatString="{0:c}" />
- <asp:BoundField DataField="Quantity" HeaderText="Quantity" />
- </Columns>
- </asp:GridView>
- <b>Total:</b>
- <asp:Label ID="lblTotal" runat="Server" />
- <br />
- <b> Profile:</b><asp:Label ID="lblProfile" runat="server" Text="[lblProfile]"></asp:Label>
- <br />
- <a href="profileView.aspx" target="_blank">profileView</a>
- <br />
- <asp:Button ID="btnClearProfile" runat="server" οnclick="btnClearProfile_Click"
- Text="ClearProfile" />
- <br />
- <asp:GridView ID="GridView1" runat="server">
- </asp:GridView>
- </td>
- </tr>
- </table>
- </form>
- </body>
- </html>
五shopping.aspx.cs代碼
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Globalization;
- using System.Web.Profile;
- namespace ShoppingCartTest
- {
- public partial class shopping : System.Web.UI.Page
- {
- private static UserProfile Profile ;
- // 綁定購物車
- private void BindShoppingCart()
- {
- if (Profile.ProfileShoppingCart != null)
- {
- CartGrid.DataSource = Profile.ProfileShoppingCart.CartItems;
- CartGrid.DataBind();
- lblTotal.Text = Profile.ProfileShoppingCart.Total.ToString("c");
- }
- }
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- //Profile = UserProfile.GetUserProfile("ProfileShoppingCart");
- Profile = UserProfile.GetUserProfile();
- BindShoppingCart();
- }
- GridView1.DataSource = ProfileManager.GetAllProfiles(System.Web.Profile.ProfileAuthenticationOption.All);
- GridView1.DataBind();
- lblProfile.Text = Profile.UserName;
- }
- // 移除購物車中的產品
- protected void RemoveCartItem(object sender, EventArgs e)
- {
- int ID = (int)CartGrid.SelectedDataKey.Value;
- Profile.ProfileShoppingCart.RemoveItem(ID);
- Profile.Save();
- BindShoppingCart();
- }
- // 添加產品到購物車
- protected void AddCartItem(object sender, EventArgs e)
- {
- GridViewRow row = ProductGrid.SelectedRow;
- int ID = (int)ProductGrid.SelectedDataKey.Value;
- String Name = row.Cells[1].Text;
- decimal Price = Decimal.Parse(row.Cells[2].Text,
- NumberStyles.Currency);
- if (Profile.ProfileShoppingCart == null)
- Profile.ProfileShoppingCart = new ProfileShoppingCart();
- Profile.ProfileShoppingCart.AddItem(ID, Name, Price);
- Profile.Save();
- BindShoppingCart();
- }
- protected void btnClearProfile_Click(object sender, EventArgs e)
- {
- foreach (ProfileInfo pf in ProfileManager.GetAllProfiles(System.Web.Profile.ProfileAuthenticationOption.All))
- {
- if (DateTime.Now.Day - pf.LastUpdatedDate.Day >= 1)
- {
- ProfileManager.DeleteProfile(pf.UserName);
- }
- }
- GridView1.DataSource = ProfileManager.GetAllProfiles(System.Web.Profile.ProfileAuthenticationOption.All);
- GridView1.DataBind();
- }
- }
- }
六 Global.asax.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Security;
- using System.Web.SessionState;
- using System.Web.Profile;
- namespace ShoppingCartTest
- {
- public class Global : System.Web.HttpApplication
- {
- protected void Profile_MigrateAnonymous(Object sender,ProfileMigrateEventArgs e)
- {
- UserProfile Profile = UserProfile.GetUserProfile("ProfileShoppingCart");
- UserProfile anonProfile = UserProfile.GetUserProfile(e.AnonymousID);
- Profile.ProfileShoppingCart = anonProfile.ProfileShoppingCart;
- }
- }
- }
轉至:http://www.cnblogs.com/mimengjiangnan/archive/2008/12/10/1351968.html