jeremyyang824,给了我一段很精简的购物车操作类的代码:
就两个页面:一个公共操作类:
default.aspx 首页显示产品信息
shopcart.aspx 购物车处理信息
App_code/shopcart.cs 购物车操作类
我把全部代码都贴出来。//*********************************************************default.aspx(代码):
需向shopcart.aspx传送(productid(产品ID号)/productname(产品名称)
/memberprice(产品价格)/quantity(产品数量)/imageurl(产品图片的路径)共五个参数)<a href="shopcart.aspx?productid=1000&productname=数码相机memberprice=2000&quantity=1&imageurl=pic1.img">数码相机加入购物车</a><br /><br />
<a href="shopcart.aspx?productid=1001&productname=摄相机memberprice=3000&quantity=1&imageurl=pic2.img">摄相机加入购物车</a><br /><br />
<a href="shopcart.aspx">查看购物车</a>//*********************************************************shopcart.aspx.cs(代码):
public partial class shopcart : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        int productid = int.Parse(Request.QueryString["productid"]);
        string productname = Request.QueryString["productname"];
        decimal memberprice = Convert.ToDecimal(Request.QueryString["memberprice"]);
        int quantity = int.Parse(Request.QueryString["quantity"]);
        string imageurl = Request.QueryString["imageurl"]; 
    }
    public void Buy(int productid, string productname, decimal memberprice, int quantity, string imageurl)
    {
        //若购物车不存在则新建    
        if (Session["cart"] == null)
        {
            Session["cart"] = new ShoppingCart();
        }        ShoppingCart cart = (ShoppingCart)Session["cart"];
        cart.Insert(productid, productname, memberprice, quantity, imageurl);
    }
}//*********************************************************App_code目录下的shopcart.cs(代码):using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.Collections.Generic;/// <summary>
/// 购物车中的项
/// </summary>
[Serializable]
public class CartItem
{
    private int _productid;
    private string _productname;
    private string _imageurl;
    private int _quantity;
    private decimal _memberprice;
    private decimal _lineTotal;    public int productid
    {
        get { return _productid; }
        set { _productid = value; }
    }
    public string productname
    {
        get { return _productname; }
        set { _productname = value; }
    }
    public string imageurl
    {
        get { return _imageurl; }
        set { _imageurl = value; }
    }
    public int quantity
    {
        get { return _quantity; }
        set { _quantity = value; }
    }
    public decimal memberprice
    {
        get { return _memberprice; }
        set { _memberprice = value; }
    }
    public decimal LineTotal //单项总价(只读)
    {
        get { return _quantity * _memberprice; }
    }    public void New(int productid, string productname,int quantity, decimal memberprice, string imageurl)
    {
        _productid = productid;
        _productname = productname;
        _imageurl =imageurl;
        _quantity = quantity;
        _memberprice = memberprice;
        _lineTotal = quantity * memberprice;
    }
}/// <summary>
/// 购物车
/// </summary>
[Serializable]
public class ShoppingCart
{
    private DateTime _dateCreated;
    private DateTime _lastUpdate;
    private List<CartItem> _items;    public List<CartItem> Items
    {
        get { return _items; }
        set { _items = value; }
    }
    public decimal Total //总价(只读)
    {
        get
        {
            decimal t = 0;
            if (_items == null)
            {
                return 0;
            }
            foreach (CartItem item in _items)
            {
                t += item.LineTotal;
            }
            return t;
        }
    }    public ShoppingCart()
    {
        if (this._items == null)
        {
            this._items = new List<CartItem>();
            this._dateCreated = DateTime.Now;
        }
    }    public void Insert(int productid, string productname, decimal memberprice, int quantity, string imageurl)
    {
        int itemIndex = ItemIndexOfID(productid);
        if (itemIndex == -1) //购物车中还未存在此产品,新实例化一个CartItem并加入购物车中
        {
            CartItem newItem = new CartItem();
            newItem.productid = productid;
            newItem.productname = productname;
            newItem.quantity = quantity;
            newItem.memberprice = memberprice;
            newItem.imageurl = imageurl;            _items.Add(newItem);
        }
        else //购物车中存在此产品,只需增加此商品的数量
        {
            _items[itemIndex].quantity += 1;
        }
        _lastUpdate = DateTime.Now;
    }
    public void Update(int rowID, int quantity)
    {
        CartItem item = _items[rowID];
        item.quantity = quantity;
        _lastUpdate = DateTime.Now;
    }
    public void DeleteItem(int rowID)
    {
        _items.RemoveAt(rowID);
        _lastUpdate = DateTime.Now;
    }    public void ShowItem()
    {
        foreach (CartItem item in _items)
        { }
    }
    //搜索购物车中是否存在某商品,若存在则返回在购物车中的索引,不存在则返回-1
    private int ItemIndexOfID(int productid)
    {
        int index = 0;
        foreach (CartItem item in _items)
        {
            if (item.productid == productid)
            {
                return index;
            }
            index += 1;
        }
        return -1;
    }
}现在有一个问题,就是当点击购买后,要显示购物车中所有session的产品信息,并且数量那一项是要可以修改的。
希望jeremyyang824可以再来一下!
刚接触.net,好多都不懂,希望大家帮忙指点一下。
我同时也将代码打包放在这上面,请大家下载一下,帮忙指点一下,谢谢。
http://www.gwbattery.com/shopcart.rar

解决方案 »

  1.   

    楼上说的不错,可以用hashtable存储对象集.
    要做完整的购物车系统,牵扯到知识点很多的
    有权限管理,profile,匿名用户,在web.config中的配置,很多很多,建议楼主看看wrox的begginging at asp.net2.0里面有专门的章节讨论这个问题.
    可以在网上下载电子书.
      

  2.   

    喔,谢谢两位的指点。
    谢谢。
    我上次听一个高手说,他说这个代码是可以了,只要写多一个显示购物车的方法ShowItem就行了。
    我就想在这基础上让它显示出来就行了。
      

  3.   

    StringBuilder sb = new StringBuilder();
    sb.Append("<table>");
    sb.Append("<tr>");
    for(int i=0;i<list.Length;i++)
    {
    //把图片和信息加入到table里面
    }
    sb.Append("<table>");
    sb.Append("<tr>");
    //重写要显示的页面
    //页面写个<!--重写标记-->
    用string.Replace就可以了
      

  4.   

    重新更新你的session即可啊 不要老问那个给你程序的 有依赖性的新更新session的办法是 删除原先的session 把新的session作为备用的
      

  5.   

    sorry 上贴写的有点糊涂
    建个物品类 里面包括 GetSumbySessionid
    界面给用户填数量的text, 然后货物表里加个字段,专门为了得到用户购买数量
    明白,这样?
      

  6.   

    设置一个购物篮 (Cart)
    CartId
    UserId
    BookId
    Amount
    这个是表结构 这样做 比我上贴思路要好
      

  7.   

    建立Cart.cs
    /// <summary>
    /// 根据参数userId,获取购物篮详细信息
    /// </summary>
    /// <param name="userId">用户ID</param>
    public void LoadData(int userId)
    {
    Database db=new Database(); //实例化一个Database类 string sql="";
    sql="Select * from [Cart] where UserID = "+ userId ; SqlDataReader reader=db.GetDataReader(sql); //利用Database类的GetDataRow方法查询用户数据 //根据查询得到的数据,对成员安全赋值
    while(reader.Read())
    {
    if(this._cartId==0)
    {
    this._cartId=GetSafeData.ValidateDataReader_N(reader,"CartId");
    this._userId=GetSafeData.ValidateDataReader_N(reader,"UserId");
    }
    this._books.Add(GetSafeData.ValidateDataReader_N(reader,"BookId"));
    this._amount.Add(GetSafeData.ValidateDataReader_N(reader,"Amount"));

    this._exist=true;
    }
    if(this._cartId==0)
    {
    this._exist=false;
    }
    } /// <summary>
    /// 向数据库添加一个购物篮中的一种图书
    /// </summary>
    /// <param name="topicInfo">购物篮中的一种图书的信息哈希表</param>
    public void Add(Hashtable cartInfo)
    {
    Database db=new Database(); //实例化一个Database类
    db.Insert("[Cart]",cartInfo ); //利用Database类的Inser方法,插入数据
    } /// <summary>
    /// 修改购物篮中的一种图书内容
    /// </summary>
    /// <param name="newCartInfo">新的购物篮信息哈希表</param>
    /// <param name="condition">Update的Where子句</param>
    public void Update(Hashtable newCartInfo,int cartId)
    {
    Database db=new Database();
    string condition = "Where CartID = "+cartId.ToString();
    db.Update("[Cart]",newCartInfo,condition);
    } /// <summary>
    /// 删除整个购物篮
    /// </summary>
    public void Delete()
    {
    Database db=new Database();
    string strSql="Delete From [Cart] Where CartID = "+this._cartId;
    db.ExecuteSQL(strSql);
    } /// <summary>
    /// 删除购物篮种某种图书
    /// </summary>
    /// <param name="cartId">将要删除购物篮的项目编号</param>
    public void RemoveBook(int cartId)
    {
    Database db=new Database();
    string strSql="Delete From [Cart] Where cartId = "+cartId.ToString();
    db.ExecuteSQL(strSql);
    } /// <summary>
    /// 查询userId的购物篮中的信息,并以DataTable返回
    /// </summary>
    /// <param name="userId">用户编号</param>
    /// <returns>购物篮信息DataTable</returns>
    public static DataTable Query(int userId)
    {
    string sql="";
    sql="Select * From [Cart],[Book] Where [Cart].UserId = "+userId
    +" And [Cart].bookId=[Book].bookId";
    Database db=new Database();
    return db.GetDataTable(sql);
    } #endregion 方法
      

  8.   

    谢谢,还不是懂。
    物品类,好像我上面建过了啊。
    重新更新session的办法是   删除原先的session?
    然后货物表里加个字段?
    更新后还要删除sessio?
    货物表又是做什么用的?
    糊涂了。
      

  9.   

    有了上面的工具类 想做 购货数量的CRUD 就不难了
    给你个 修改所购物数量 的代码以及类 自己参照着写其他的了<%@ Page language="c#" Inherits="MyBookShop.Web.CartView" CodeFile="CartView.aspx.cs" %>
    <%@ Register TagPrefix="MyBookShop" TagName="HeaderMenu" Src="UserControls/HeaderMenu.ascx" %>
    <%@ Register TagPrefix="MyBookShop" TagName="UserCheck" Src="UserControls/UserCheck.ascx" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>CartView</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    <LINK href="Styles/Style.css" type="text/css" rel="stylesheet">
    </HEAD>
    <body>
    <form id="Form1" method="post" runat="server">
    <FONT face="宋体">
    <TABLE id="Table1" style="Z-INDEX: 101; LEFT: 8px; WIDTH: 504px; POSITION: absolute; TOP: 8px; HEIGHT: 136px"
    cellSpacing="0" cellPadding="0" width="504" border="0">
    <TR>
    <TD align="center"><MYBOOKSHOP:HeaderMenu id="headerMenu" runat="server"></MYBOOKSHOP:HeaderMenu><MYBOOKSHOP:UserCheck id="userCheck1" runat="server"></MYBOOKSHOP:UserCheck></TD>
    </TR>
    <TR>
    <TD>&gt;&gt;购买图书&gt;&gt;我的购物篮</TD>
    </TR>
    <TR>
    <TD vAlign="top" align="center">
                                <asp:GridView ID="GV" runat="server" AutoGenerateColumns="False" OnRowCancelingEdit="GV_RowCancelingEdit" OnRowCommand="GV_RowCommand" OnRowDeleting="GV_RowDeleting" OnRowEditing="GV_RowEditing" OnRowUpdating="GV_RowUpdating">
                                    <Columns>
                                        <asp:BoundField DataField="CartId" ReadOnly="True" HeaderText="购物篮编号" />
                                        <asp:BoundField DataField="BookName" ReadOnly="True" HeaderText="图书名"/>
                                        <asp:BoundField DataField="Amount" HeaderText="数量"/>
                                        <asp:CommandField ShowEditButton="True" />
                                        <asp:CommandField ShowDeleteButton="True" />
                                    </Columns>
                                </asp:GridView>
                            </TD>
    </TR>
    <TR>
    <TD align="right" bgColor="aqua" style="HEIGHT: 9px"><asp:button id="ButtonBack" runat="server" Text="继续选购" Width="65px" onclick="ButtonBack_Click"></asp:button>&nbsp;&nbsp;&nbsp; 
    &nbsp;
    <asp:Button id="ButtonBuy" runat="server" Text="去结算中心" Width="77px" onclick="ButtonBuy_Click"></asp:Button></TD>
    </TR>
    </TABLE>
    </FONT>
    </form>
    </body>
    </HTML>
      

  10.   

    非常感谢提供这种思路及代码。
    不过我还是喜欢用session来做购物车。
    对了,USERID?
    那用户不是要先注册才可以购买了?
    还有,每个购物车内的物品都要用写入到数据库去,如果很多人同时登录操作,数据库性能也会下渐很多了。
      

  11.   

    对应类
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;using MyBookShop.BusinessLogicLayer;namespace MyBookShop.Web
    {
    /// <summary>
    /// CartView 的摘要说明。
    /// </summary>
    public partial class CartView : System.Web.UI.Page
    { /// <summary>
    /// 页面加载事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    InitData();
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    }
    #endregion /// <summary>
    /// 查询当前用户的购物篮,初始化页面数据
    /// </summary>
    private void InitData()
    {
    int userId=0;
    if(Session["user_id"]!=null)
    userId=Convert.ToInt32(Session["user_id"].ToString());
    DataTable dt=Cart.Query(userId);
    GV.DataSource=dt;
    GV.DataBind();
    } /// <summary>
    /// 返回按钮的单击事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ButtonBack_Click(object sender, System.EventArgs e)
    {
    Response.Redirect("BookList.aspx");
    } /// <summary>
    /// DataGrid编辑按钮列单击事件
    /// </summary>
    /// <param name="source"></param>
    /// <param name="e"></param>
    private void DG_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    //设置当前修改项的索引
    GV.EditIndex= (int)e.Item.ItemIndex;
    InitData(); 
    } /// <summary>
    /// DataGrid取消按钮列单击事件
    /// </summary>
    /// <param name="source"></param>
    /// <param name="e"></param>
    private void DG_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    //设置修改项的索引为-1,即没有行处于被修改状态
    GV.EditIndex = -1; 
    InitData();
    }        /// <summary>
    /// 去结算中心按钮单击事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ButtonBuy_Click(object sender, System.EventArgs e)
    {
    Response.Redirect("Bill.aspx");
    } protected void DG_SelectedIndexChanged(object sender, System.EventArgs e)
    {

    }        /// <summary>
            /// 按钮单击事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void GV_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                int index = Convert.ToInt32(e.CommandArgument); //待处理的行下标
                int cartId = -1;
                Cart cart = new Cart();            switch (e.CommandName)
                {
                        //编辑
                    case "Edit":
                        GV.EditIndex = index;
                        break;                    //修改
                    case "Update":
                        cartId = Convert.ToInt32(GV.Rows[index].Cells[0].Text);
                        Hashtable ht = new Hashtable();
                        ht.Add("Amount", ((TextBox)GV.Rows[index].Cells[2].Controls[0]).Text.ToString());                    
                        cart.Update(ht, cartId);
                        GV.EditIndex = -1;
                        break;                    //取消
                    case "Cancel":
                        GV.EditIndex = -1;
                        break;                    //删除
                    case "Delete":
                        cartId = Convert.ToInt32(GV.Rows[index].Cells[0].Text);
                        cart.RemoveBook(cartId); //利用Cart的Remove方法,删除某种图书
                        break;
                    default:
                        break;
                }
                InitData();
            }        protected void GV_RowEditing(object sender, GridViewEditEventArgs e)
            {
            }        protected void GV_RowUpdating(object sender, GridViewUpdateEventArgs e)
            {        }
            protected void GV_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {        }
            protected void GV_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
            {        }
    }
    }
      

  12.   

    对了,USERID? 
    那用户不是要先注册才可以购买了? 

    还有,每个购物车内的物品都要用写入到数据库去,如果很多人同时登录操作,数据库性能也会下渐很多了
    若你不想注册的形式 可以随机的为每个ip派送一位id,形式随你,就用sessionid好了
    多少人呢??呵呵 并发数是看数据库设置 ,访问快慢看你的机器内存 ,若进一步优化,写个缓存的代码
    我是从java过来的 java里有hibernate 估计csharp里也有,objectdatasource就是了
      

  13.   

    cartview。aspx
    <%@ Page language="c#" Inherits="MyBookShop.Web.CartView" CodeFile="CartView.aspx.cs" %>
    <%@ Register TagPrefix="MyBookShop" TagName="HeaderMenu" Src="UserControls/HeaderMenu.ascx" %>
    <%@ Register TagPrefix="MyBookShop" TagName="UserCheck" Src="UserControls/UserCheck.ascx" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>CartView</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    <LINK href="Styles/Style.css" type="text/css" rel="stylesheet">
    </HEAD>
    <body>
    <form id="Form1" method="post" runat="server">
    <FONT face="宋体">
    <TABLE id="Table1" style="Z-INDEX: 101; LEFT: 8px; WIDTH: 504px; POSITION: absolute; TOP: 8px; HEIGHT: 136px"
    cellSpacing="0" cellPadding="0" width="504" border="0">
    <TR>
    <TD align="center"><MYBOOKSHOP:HeaderMenu id="headerMenu" runat="server"></MYBOOKSHOP:HeaderMenu><MYBOOKSHOP:UserCheck id="userCheck1" runat="server"></MYBOOKSHOP:UserCheck></TD>
    </TR>
    <TR>
    <TD>&gt;&gt;购买图书&gt;&gt;我的购物篮</TD>
    </TR>
    <TR>
    <TD vAlign="top" align="center">
                                <asp:GridView ID="GV" runat="server" AutoGenerateColumns="False" OnRowCancelingEdit="GV_RowCancelingEdit" OnRowCommand="GV_RowCommand" OnRowDeleting="GV_RowDeleting" OnRowEditing="GV_RowEditing" OnRowUpdating="GV_RowUpdating">
                                    <Columns>
                                        <asp:BoundField DataField="CartId" ReadOnly="True" HeaderText="购物篮编号" />
                                        <asp:BoundField DataField="BookName" ReadOnly="True" HeaderText="图书名"/>
                                        <asp:BoundField DataField="Amount" HeaderText="数量"/>
                                        <asp:CommandField ShowEditButton="True" />
                                        <asp:CommandField ShowDeleteButton="True" />
                                    </Columns>
                                </asp:GridView>
                            </TD>
    </TR>
    <TR>
    <TD align="right" bgColor="aqua" style="HEIGHT: 9px"><asp:button id="ButtonBack" runat="server" Text="继续选购" Width="65px" onclick="ButtonBack_Click"></asp:button>&nbsp;&nbsp;&nbsp; 
    &nbsp;
    <asp:Button id="ButtonBuy" runat="server" Text="去结算中心" Width="77px" onclick="ButtonBuy_Click"></asp:Button></TD>
    </TR>
    </TABLE>
    </FONT>
    </form>
    </body>
    </HTML>
      

  14.   

    改改就好了 我以前有个项目就是基于这个demo开发的 这个雏形很好 我觉得
      

  15.   

    相应的类也给你吧 方便你修改
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;using MyBookShop.BusinessLogicLayer;namespace MyBookShop.Web
    {
    /// <summary>
    /// CartView 的摘要说明。
    /// </summary>
    public partial class CartView : System.Web.UI.Page
    { /// <summary>
    /// 页面加载事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    InitData();
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    }
    #endregion /// <summary>
    /// 查询当前用户的购物篮,初始化页面数据
    /// </summary>
    private void InitData()
    {
    int userId=0;
    if(Session["user_id"]!=null)
    userId=Convert.ToInt32(Session["user_id"].ToString());
    DataTable dt=Cart.Query(userId);
    GV.DataSource=dt;
    GV.DataBind();
    } /// <summary>
    /// 返回按钮的单击事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ButtonBack_Click(object sender, System.EventArgs e)
    {
    Response.Redirect("BookList.aspx");
    } /// <summary>
    /// DataGrid编辑按钮列单击事件
    /// </summary>
    /// <param name="source"></param>
    /// <param name="e"></param>
    private void DG_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    //设置当前修改项的索引
    GV.EditIndex= (int)e.Item.ItemIndex;
    InitData(); 
    } /// <summary>
    /// DataGrid取消按钮列单击事件
    /// </summary>
    /// <param name="source"></param>
    /// <param name="e"></param>
    private void DG_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    //设置修改项的索引为-1,即没有行处于被修改状态
    GV.EditIndex = -1; 
    InitData();
    }        /// <summary>
    /// 去结算中心按钮单击事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ButtonBuy_Click(object sender, System.EventArgs e)
    {
    Response.Redirect("Bill.aspx");
    } protected void DG_SelectedIndexChanged(object sender, System.EventArgs e)
    {

    }        /// <summary>
            /// 按钮单击事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void GV_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                int index = Convert.ToInt32(e.CommandArgument); //待处理的行下标
                int cartId = -1;
                Cart cart = new Cart();            switch (e.CommandName)
                {
                        //编辑
                    case "Edit":
                        GV.EditIndex = index;
                        break;                    //修改
                    case "Update":
                        cartId = Convert.ToInt32(GV.Rows[index].Cells[0].Text);
                        Hashtable ht = new Hashtable();
                        ht.Add("Amount", ((TextBox)GV.Rows[index].Cells[2].Controls[0]).Text.ToString());                    
                        cart.Update(ht, cartId);
                        GV.EditIndex = -1;
                        break;                    //取消
                    case "Cancel":
                        GV.EditIndex = -1;
                        break;                    //删除
                    case "Delete":
                        cartId = Convert.ToInt32(GV.Rows[index].Cells[0].Text);
                        cart.RemoveBook(cartId); //利用Cart的Remove方法,删除某种图书
                        break;
                    default:
                        break;
                }
                InitData();
            }        protected void GV_RowEditing(object sender, GridViewEditEventArgs e)
            {
            }        protected void GV_RowUpdating(object sender, GridViewUpdateEventArgs e)
            {        }
            protected void GV_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {        }
            protected void GV_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
            {        }
    }
    }
      

  16.   

    nanjg,谢谢您。
    有点明白了.
    对了,那如果用我原先的程序,要怎么跟gridview绑定并显示啊?
      

  17.   

    nanjg,谢谢您。
    有点明白了.
    对了,那如果用我原先的程序,要怎么跟gridview绑定并显示啊?
      

  18.   

    CRUD 关联到 gridview 就行了啊?呵呵 记得给分哦?朋友!
      

  19.   

    所谓 gridview 它就是一个显示的大容器 你改怎么实现业务就怎么放手的去做 抱歉我是java过来的因为新项目需要 呵呵 混混。net专区
      

  20.   

    绑定数据 涉及 gridview的 几个属性
    方法 拖拽出一个控件来 点击查看代码 就可看到主要的四个属性 大多是 指定“结果集名”
    而这个结果集名 就是你CRUD 出来的结果集了
      

  21.   

    这个是我的另一个参考项目的代码
    可以借鉴 怎么代码形式用gridview
    dst = cd.GetData("select kfcg,wtid,intime,zhanduan,zhanming,leibie,miaoshu,koufen,hejianren,ischeck,left(zg,3) as zt,left(ps,3) as lj,left(chl,4) as cl from my_allwenti"+tj+" order by dt desc");
                GridView1.DataSource = dst;
                GridView1.DataBind();
                GridView2.DataSource = dst;
                GridView2.DataBind();
      

  22.   

    nanjg,谢谢您。
    用gridview连接数据库的表我就会,但是连接这个购物车的类,我就不懂了。
    我这样来绑定,一运行就出错。 <asp:GridView ID="GridView1" runat="server" DataSourceID="ShoppingCart">
            </asp:GridView>
            <asp:ObjectDataSource ID="ShoppingCart" runat="server"></asp:ObjectDataSource>
      

  23.   

    gridview是显示结果集用的东东 我的那个Cart类 是用来统一处理 CRUD购物车的:)
      

  24.   

    cartview。aspx 
    就是显示Cart的 页面啊 页面上方实现货物数量修改和删除 
      

  25.   

    8点了 mygod oh yeah!~下班了
      

  26.   

    vs2003里的C:\Program Files\Microsoft Visual Studio .NET 2003\Enterprise Samples\Duwamish 7.0 CS有一个可以修改购物数量的例子,不过有点难.
      

  27.   

    用javascript+cookie实现购物车功能,而且是AJAX哦