c#中winfrom如何实现查看购物车?200分!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#中winfrom如何实现查看购物车?200分!!相关的知识,希望对你有一定的参考价值。

最近在做图书管理系统,如何实现查看书籍后先放到购物车中,随后在点击购物车提交到数据库中? 还有订单表和订单详细表改怎么做?点击订单能够查看订单详细? 大家各抒己见吧.

关键思路:用session保存保存订单信息

第一步,首先定义基础类购物车Shoppingcart类 和订单ReqOrder类
[Serializable]
public class ShoppingCart

Hashtable _Orders = new Hashtable();

public ICollection Orders

get return _Orders.Values;


//添加
public void AddOrder(ReqOrder Order)

ReqOrder order = (ReqOrder)_Orders[Order.Req_id];

if (order == null)

_Orders.Add(Order.Req_id,Order);



//删除
public void RemoveOrder(string Req_ID)

if (_Orders[Req_ID] != null)

_Orders.Remove(Req_ID);



//更新数量
public void UpdateNum(string Req_ID, string num)

if (_Orders[Req_ID] != null)

ReqOrder order = (ReqOrder)_Orders[Req_ID];
order.Num = num;




[Serializable]
public class ReqOrder

public ReqOrder(string Req_id, string Req_Name,string Num)

req_id = Req_id;
req_name = Req_Name;
num = Num;

string req_id;

public string Req_id

get return req_id;
set req_id = value;

string req_name;

public string Req_name

get return req_name;
set req_name = value;

string num;
public string Num

get return num;
set num = value;


第二步,在Global.asax中初始化session
protected void Session_Start(object sender, EventArgs e)

Session["MyShoppingCart"] = new ShoppingCart();


第三步,添加需要购买的东西到购物车

ReqOrder order = new ReqOrder(tb_req_id.Text.Trim(), tb_req_name.Text.Trim(), "0");
//这里构造函数变量需要自定义
ShoppingCart cart = (ShoppingCart)Session["MyShoppingCart"];
cart.AddOrder(order);
Response.Redirect("Req_ShoppingCart.aspx");

第四步,购物车页面实现CRUD删改操作
//修改购物车
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)


string req_id = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
GridViewRow gr = this.GridView1.Rows[e.RowIndex];
TextBox tb = (TextBox)gr.Cells[2].FindControl("TextBox1");
cart.UpdateNum(req_id, tb.Text);
this.GridView1.EditIndex = -1;
this.BindData();

//删除
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

string req_id = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
cart.RemoveOrder(req_id);
this.DataBind();

//清空购物车
protected void ClearShoppingCart()

Session["MyShoppingCart"] = new ShoppingCart();
this.DataBind();


//购物车下单
protected void Button1_Click1(object sender, EventArgs e)


ApplyRecordDAO recordDao = new ApplyRecordDAO();
string apply_id = recordDao.CreateRecordID(Tool.GetDateStr());
//这里可以遍历购物车的gridview,进行相关的订单生成细节
//最后清空session
ClearShoppingCart();
Response.Redirect("Req_Apply.aspx?apply_id=" + apply_id);


基本上完成了购物车功能
参考技术A 1.在数据库中增加一个表,用于记录购物车,好处是记录稳定,不会随着用户不正常退出而丢东西,缺点是占用服务器资源,同时在线用户少,服务器资源充足的时候建议这么用。
2.声明一个公共变量,ArrayList类型,用的时候随时往里面加。ArrayList的元素可以兼容任何类型,所以你可以把书的信息写成一个struct,然后将这个自定义类型加到ArrayList中。优点缺点与前面的正好相反,同时在线用户数比较多(超过10人,服务器不怎么好,老机器)建议这么用。
3.Session是不能用于winForm中的,那个是网页特有的变量,但是网页里面也没有这么方便的公共变量用。本回答被提问者采纳
参考技术B 对于购物车,如果是软件运行一次,重置一次的话,可以用List来存储书籍Id,如果要一直保留购物车,等待用户清空的话,可以存储在数据库中!订单表,可以设计为订单号,下单人,订单中书籍,等关键字段,然后订单中书籍中保存用逗号连接的多个书籍Id,查看详细,就直接取出订单中书籍字段内容,作为书籍信息表的in条件,就可以查询出详细订单了! 参考技术C 建一个Winform 里面写一个购物车的静态列表, 所有页面需要用到购物车就点出这个静态列表。增删改 参考技术D 用winform做购物?这系统太奇怪了吧,

winform中的DataGridView如何实现分页(C#)

使用四个button控件,分别实现首页、上一页、下一页、最后一页查询功能,并且每页只显示12条数据。

winfrom是应用程序 根本就不存在分页这个概念。
你只需要点击上一页 下一页 最后一页、首页 这些按钮事件里面 控制一下参数即可。‘
给你写个简单的分页语句:
select top 12 * from books where id not in(select top 12 id from books order by id) order by id
前面这个12意思是 查询前12条,后面这个12表示 不等于前12条。
合起来的意思 就是不等于前12条的前12条,也就是说 这个是第二页。
如果你想翻到第一页 后面12改为0即可。如果翻到第三页 后面12改为24.

这个很简单,不过你数据量过万 就还是考虑一下吧,这种语句效率不算很好。
参考技术A 这个是我在asp中的,不过你改改就该能用,希望对你有帮助。
前台代码,写在gridview的代码里,不过我没用按钮,用的是标签:
<PagerTemplate>
<asp:Label ID="lblPage" runat="server" Text='<%# "第" + (((GridView)Container.NamingContainer).PageIndex + 1) + "页/共" + (((GridView)Container.NamingContainer).PageCount) + "页" %> '></asp:Label>
<asp:LinkButton ID="lbnFirst" runat="Server" Text="首页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'
CommandName="Page" CommandArgument="First"></asp:LinkButton>
<asp:LinkButton ID="lbnPrev" runat="server" Text="上一页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'
CommandName="Page" CommandArgument="Prev"></asp:LinkButton>
<asp:LinkButton ID="lbnNext" runat="Server" Text="下一页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != (((GridView)Container.NamingContainer).PageCount - 1) %>'
CommandName="Page" CommandArgument="Next"></asp:LinkButton>
<asp:LinkButton ID="lbnLast" runat="Server" Text="尾页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != (((GridView)Container.NamingContainer).PageCount - 1) %>'
CommandName="Page" CommandArgument="Last"></asp:LinkButton>
到第<asp:TextBox Width="30" runat="server" ID="inPageNum"></asp:TextBox>页
<asp:Button ID="Button1" Text="GO" CommandName="go" runat="server" />
</PagerTemplate>

后台代码,在gridview的相应事件里写:
protected void Show_PageIndexChanging(object sender, GridViewPageEventArgs e)

this.gridviewCus.PageIndex = e.NewPageIndex;
BindGridView();//数据源绑定方法
参考技术B 介意你不要用四个按钮的形式做分页(因为我以前也是这么做的,结果发现不理想),你可以到网上下载一个。net的分页控件。配合该控件的分页代码,网上也是有很多的,实在差不多代码,在问我。我去找找以前做的。本回答被提问者采纳 参考技术C 很崩溃。你在ASP中做分页也许是考虑数据量大一次显示不方便,但是在winform中主要做没意义,通常来讲数据量在10W之内的时候显示不影响的。而且VS带的数据显示控件中也没有分页的功能。如果一定要分页,也只是把数据源进行分段,然后根据按钮的要求进行数据绑定。winform数据分页非常不推荐。 参考技术D 你可以在sql语句里实现分页呀,在自己添加或制作翻页控件

以上是关于c#中winfrom如何实现查看购物车?200分!!的主要内容,如果未能解决你的问题,请参考以下文章

C#(Winfrom)窗体传值问题(子窗体回传值给父窗体)

C# winfrom datagridview 怎样实现 如图效果 程序动态添加数据呢?

C# winfrom listView 怎样显示这种样式

C# winfrom中如何隐藏标题栏中的 关闭按钮图标?

在C#中怎样在两个Form之间传递数据(Winfrom)?

C# winfrom程序 dev控件 gridview实现鼠标悬浮变色,离开颜色恢复