当用户点击选择链接时,我已经编写了以下代码来从gridView获取productID
。
Convert.ToInt32(GridView1.SelectedDataKey.Values["productID"])))
但是,如果用户点击多次点击,则较新的值会替换之前的值。当用户点击新项目时,有没有办法继续添加到购物车列表?
希望有意义
由于
编辑:
这是购物页面的代码:
public partial class _Default : System.Web.UI.Page
{
List<BasketClass> cart = new List<BasketClass>();
protected void GridView1_SelectedIndexChanged1(object sender, EventArgs e)
{
cart.Add(new BasketClass(Convert.ToInt32(GridView1.SelectedDataKey.Values["BookID"])));
Session.Add("CartSess", cart);
Response.Redirect("Basket.aspx");
}
}
我不知道创建列表的位置是否重要?如果它会继续创建一个新实例,不确定它是否被置于click事件中?
然后对于篮子页我有:
protected void Page_Init(object sender, EventArgs e)
{
List<BasketClass> cart = (List<BasketClass>)Session["CartSess"];
foreach (BasketClass BookID in cart)
{
GridView1.DataSource = cart;
GridView1.DataBind();
AccessDataSource1.SelectCommand = "SELECT [BookID], [book_title] FROM [tblBook] ";
}
}
答案 0 :(得分:1)
你不应该在页面顶部创建BasketCart列表对象,即使你这样做也没有太大的区别,我想你可以这样做:
protected void Page_Init(object sender, EventArgs e)
{
if(Session["CartSess"]!=null)
{
foreach (BasketClass BookID in (List<BasketClass>)Session["CartSess"])
{
GridView1.DataSource = cart;
GridView1.DataBind();
AccessDataSource1.SelectCommand = "SELECT [BookID], [book_title] FROM [tblBook] ";
}
}
}
你的GridView甚至应该是:
protected void GridView1_SelectedIndexChanged1(object sender, EventArgs e)
{
List<BasketClass> cart;
if(Session["CartSess"]!=null)
{
cart = (List<BasketClass>)Session["CartSess"]
}
else
cart = new List<BasketClass>();
cart.Add(new BasketClass(Convert.ToInt32(GridView1.SelectedDataKey.Values["BookID"])));
Session.Add("CartSess", cart);
Response.Redirect("Basket.aspx");
}
答案 1 :(得分:0)
这条线不是导致您的问题,而是存储它的地方。您是否将此值传递给集合?
答案 2 :(得分:0)
使用List<int>
中保留的ViewState
?
public List<int> Selected
{
set { ViewState["_selected"] = value; }
get
{
if(ViewState["_selected"] == null)
return new List<int>();
return (List<int>)ViewState["_selected"];
}
}