asp.net 中GridView如何实现购物车

offaction 2009-04-28 07:55:54
asp.net 中GridView如何实现购物车
...全文
587 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sway80 2009-06-26
  • 打赏
  • 举报
回复
cookie 中,购物车做了三个,每个网站不一样,思路一样
qq196260188 2009-06-26
  • 打赏
  • 举报
回复
把数据放在datatable里,,gredView再从DataTable里读出来,,就是这么简单
yan286093636 2009-06-26
  • 打赏
  • 举报
回复
这是在学校做的一个Demo ,有点粗糙,改一下就行了,思路没问题..........
yan286093636 2009-06-26
  • 打赏
  • 举报
回复
---------------------------------------------.aspx 代码
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="CartShopping.ascx.cs" Inherits="UserControls_CartShopping" %>


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowCommand="GridView1_RowCommand" CellPadding="4" ForeColor="#333333" GridLines="None" DataKeyNames="BookId" Width="100%">
<Columns>
<asp:TemplateField HeaderText="书名">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Book.BookName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="单价">
<ItemTemplate>
<asp:Label ID="Label33" runat="server" Text='<%# Eval("Book.BookPrice") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="数量">
<ItemTemplate>
 <asp:TextBox ID="txtCount" runat="server" Text='<%# Eval("Count") %>'></asp:TextBox>
<asp:Button ID="Button2" runat="server" CommandArgument='<%# Eval("BookId") %>' CommandName="addCount"
Text="+" />

</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="原价价钱">
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Eval("EveryMonery") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="打折后的价钱">
<ItemTemplate>
<asp:Label ID="Label23" runat="server" Text='<%# Eval("VipPrice") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="操作">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%# Eval("Book.Id") %>'
CommandName="del">删除</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<center>
 </center><br />

<asp:Label ID="showNum" runat="server" Text=""></asp:Label>
<asp:Label ID="showMoney" runat="server" Text=""></asp:Label>
<center>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/BookManager/Default2.aspx"> <<< 继续购物>>> </asp:HyperLink>

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="结 算" />
</center>
----------------------------------.aspx.cs代码

public partial class UserControls_CartShopping : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int bookId = Convert.ToInt32(Request.QueryString["bookId"].ToString());
Book book = BookManager.GetBookByBookId(bookId);
Cart cart = this.ShopingCart;
cart.AddShoping(book);
SetDataBind();
this.showMoney.Text = "购买书本的总金额为:" + cart.TotalPrice.ToString();
this.showNum.Text = "购买书本的总数量为:" + cart.TotalCount.ToString();
}
}

public Cart ShopingCart
{
get
{
Cart cart = null;
if (Session["Cart"] == null)
{
cart = new Cart();
Session["Cart"] = cart;
}
else
{
cart=Session["Cart"] as Cart;
}
return cart;
}
}

public void SetDataBind()
{
this.GridView1.DataSource = this.ShopingCart.GetMapValues();
this.GridView1.DataBind();
}

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
string cmd = e.CommandName.ToString();
int bookId = Int32.Parse(e.CommandArgument.ToString());
if (cmd == "del")
{
this.ShopingCart.DeleteShoping(bookId);
}

if (cmd == "addCount")
{
Book book = BookManager.GetBookByBookId(bookId);
CartItem item=null;
bool isExist=this.ShopingCart.Map.TryGetValue(bookId,out item);
if (isExist) {
if (book.BookCount > item.Count + 1 || book.BookCount==item.Count + 1)
{
this.ShopingCart.AddShoping(book);
}
else {
// Response.Write("<script>alert('库存量不足请从新输入购买数量!')</script>");



}
}
}
this.SetDataBind();
this.showMoney.Text = "购买书本的总金额为:" + this.ShopingCart.TotalPrice.ToString();
this.showNum.Text = "购买书本的总数量为:" + this.ShopingCart.TotalCount.ToString();

}
/// <summary>
/// 结算
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>

protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("~/User/Bank.aspx");
}
yan286093636 2009-06-26
  • 打赏
  • 举报
回复
看看我这个吧,有点长:
---------------购物车类
namespace MyBookShop.BLL
{
[Serializable()]
public class Cart
{
private Dictionary<int, CartItem> map = new Dictionary<int, CartItem>();
public ICollection<CartItem> GetMapValues()
{
return Map.Values;
}
public Dictionary<int, CartItem> Map
{
get { return map; }
set { map = value; }
}
private int totalCount;
private float totalPrice;
public Cart()
{
this.map = new Dictionary<int, CartItem>();
this.TotalCount = 0;
}
public void AddShoping(Book book, int num)
{
CartItem item = null;
bool isExist = this.Map.TryGetValue(book.Id, out item);
if (!isExist)
{
item = new CartItem(book);
map.Add(book.Id, item);
}
else
item.Count=num;
this.TotalCount++;
}
public void AddShoping(Book book)
{
CartItem item = null;
bool isExist = this.Map.TryGetValue(book.Id, out item);
if (!isExist)
{
item = new CartItem(book);
map.Add(book.Id, item);
}
else
item.Count++;
this.TotalCount++;
}
public void DeleteShoping(int bookId)
{
CartItem item = null;
bool isExist = this.Map.TryGetValue(bookId, out item);
if (isExist)
{
item.Count--;
if (item.Count <= 0)
map.Remove(bookId);
this.TotalCount--;
}
}

public int TotalCount
{
get { return totalCount; }
set { totalCount = value; }
}
public decimal TotalPrice
{
get
{
decimal price = 0;
foreach (CartItem item in this.Map.Values)
{
int disCount=item.ZhiKou;
if(disCount==0)
price += item.Book.BookPrice * item.Count;
else
price += item.Book.BookPrice * item.Count*disCount/100;
}
return price;
}
}

}
}
------------与购物车搭配的类
[Serializable()]
public class CartItem
{
public CartItem(Book book)
{
this.bookId = book.Id;
this.book = book;
this.count = 1;
}

private int bookId;
public int BookId
{
get { return bookId; }
set { bookId = value; }
}

private Book book = null;
public Book Book
{
get { return book; }
set { book = value; }
}

private int count = 0;
public int Count
{
get { return count; }
set { count = value; }
}

private decimal everyMonery;
public decimal EveryMonery
{
get {
everyMonery = this.book.BookPrice * this.Count;
return everyMonery;
}
}

private decimal vipPrice;
public decimal VipPrice
{
get {
int userId = (HttpContext.Current.Session["user"] as User).Id;
int userStore = UserStoreManager.GetUserStoreByUserId(userId).Store;
if(userStore<50&&userStore>=0){
vipPrice= this.book.BookPrice * this.count;
}
if (userStore>=50&&userStore<100) {
vipPrice = this.book.BookPrice * this.count*90/100;
}
if (userStore >= 100 && userStore < 200) {
vipPrice = this.book.BookPrice * this.count * 80 / 100;
}
if (userStore >= 200 && userStore < 300)
{
vipPrice = this.book.BookPrice * this.count * 70 / 100;
} if (userStore >= 300 )
{
vipPrice = this.book.BookPrice * this.count * 60 / 100;
}
return vipPrice;
}
}


public int ZhiKou {
get
{
int num=0;
int userId = (HttpContext.Current.Session["user"] as User).Id;
int userStore = UserStoreManager.GetUserStoreByUserId(userId).Store;
if (userStore < 50 && userStore >= 0)
{
num= 0;
}
if (userStore >= 50 && userStore < 100)
{
num = 90;
}
if (userStore >= 100 && userStore < 200)
{
num = 80;
}
if (userStore >= 200 && userStore < 300)
{
num = 70;
} if (userStore >= 300)
{
num = 60;
}
return num;
}
}

}
jinshengming 2009-06-26
  • 打赏
  • 举报
回复
用session
白云任去留 2009-06-26
  • 打赏
  • 举报
回复
profile
chengwen2402163 2009-06-26
  • 打赏
  • 举报
回复
用session就可以
PSSonyXbox 2009-06-26
  • 打赏
  • 举报
回复
可以用Session(hashtable) 或 DataTable
duping9626 2009-04-29
  • 打赏
  • 举报
回复
下载.Net PetShop示例好好参考
liuyeede 2009-04-29
  • 打赏
  • 举报
回复
网上的列子一大堆。
zftow110 2009-04-28
  • 打赏
  • 举报
回复
给你思路,COOKIE里只存ID
陌上花花 2009-04-28
  • 打赏
  • 举报
回复
很难几句话说清楚地。
dengyun_1223 2009-04-28
  • 打赏
  • 举报
回复
Up,以前我做过。。

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧