Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在GridView中选择项目并添加到列表_C#_Asp.net - Fatal编程技术网

C# 在GridView中选择项目并添加到列表

C# 在GridView中选择项目并添加到列表,c#,asp.net,C#,Asp.net,我在下面编写了一段代码,以便在用户单击select链接时从gridView获取productID Convert.ToInt32(GridView1.SelectedDataKey.Values[“productID]”)格式) 但是,如果用户多次单击此项,则较新的值将替换以前的值。当用户单击一个新项目时,是否有办法继续添加到购物车列表中 希望这是有道理的 谢谢 编辑: 以下是我的购物页面代码: public partial class _Default : System.Web.UI.Page

我在下面编写了一段代码,以便在用户单击select链接时从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");
    }
}
public分部类\u默认值:System.Web.UI.Page
{
列表购物车=新列表();
受保护的void gridview 1\u SelectedIndexChanged1(对象发送方,事件参数e)
{
添加(新的BasketClass(转换为32(GridView1.SelectedDataKey.Values[“BookID]”));
添加(“cartses”,cart);
响应重定向(“Basket.aspx”);
}
}
我不知道创建列表的位置是否重要?不确定是否将其放置在单击事件中,是否会继续创建新实例

那么对于篮子页面,我有:

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] ";                     
    }
}
受保护的无效页\u Init(对象发送方,事件参数e)
{
列表购物车=(列表)会话[“购物车”];
foreach(购物车中的BasketClass BookID)
{     
GridView1.DataSource=购物车;
GridView1.DataBind();
AccessDataSource1.SelectCommand=“从[tblBook]中选择[BookID]、[book\u title]”;
}
}

不是这一行导致您的问题,而是您存储它的地方。是否将此值传递到集合中?

导致问题的不是此行,而是存储它的位置。是否将此值传递到集合中?

使用保存在
ViewState
中的
列表

public List<int> Selected
{
    set { ViewState["_selected"] = value; }
    get
    {
        if(ViewState["_selected"] == null)
            return new List<int>();

        return (List<int>)ViewState["_selected"];
    }    
}
已选择公共列表
{
设置{ViewState[“_selected”]=value;}
得到
{
如果(视图状态[“_selected”]==null)
返回新列表();
返回(列表)视图状态[“_selected”];
}    
}
使用保存在
视图状态中的
列表

public List<int> Selected
{
    set { ViewState["_selected"] = value; }
    get
    {
        if(ViewState["_selected"] == null)
            return new List<int>();

        return (List<int>)ViewState["_selected"];
    }    
}
已选择公共列表
{
设置{ViewState[“_selected”]=value;}
得到
{
如果(视图状态[“_selected”]==null)
返回新列表();
返回(列表)视图状态[“_selected”];
}    
}

您不应该在页面顶部创建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] ";                     
       }
    }
}
受保护的无效页\u Init(对象发送方,事件参数e)
{    
如果(会话[“Cartses”]!=null)
{    
foreach(在(列表)会话[“Cartses”]中的BasketClass BookID)
{     
GridView1.DataSource=购物车;
GridView1.DataBind();
AccessDataSource1.SelectCommand=“从[tblBook]中选择[BookID]、[book\u title]”;
}
}
}
您的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");
}
protectedvoid gridview 1\u SelectedIndexChanged1(对象发送方,事件参数e)
{
列表购物车;
如果(会话[“Cartses”]!=null)
{ 
购物车=(列表)会话[“购物车”]
}
其他的
购物车=新列表();
添加(新的BasketClass(转换为32(GridView1.SelectedDataKey.Values[“BookID]”));
添加(“cartses”,cart);
响应重定向(“Basket.aspx”);
}

您不应该在页面顶部创建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] ";                     
       }
    }
}
受保护的无效页\u Init(对象发送方,事件参数e)
{    
如果(会话[“Cartses”]!=null)
{    
foreach(在(列表)会话[“Cartses”]中的BasketClass BookID)
{     
GridView1.DataSource=购物车;
GridView1.DataBind();
AccessDataSource1.SelectCommand=“从[tblBook]中选择[BookID]、[book\u title]”;
}
}
}
您的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");
}
protectedvoid gridview 1\u SelectedIndexChanged1(对象发送方,事件参数e)
{
列表购物车;
如果(会话[“Cartses”]!=null)
{ 
购物车=(列表)会话[“购物车”]
}
其他的
购物车=新列表();
添加(新的BasketClass(转换为32(GridView1.SelectedDataKey.Values[“BookID]”));
添加(“cartses”,cart);
响应重定向(“Basket.aspx”);
}

这部分代码看起来不错。我们能再看一下您对所选产品的使用情况吗?如何存储购物车的内容?这部分代码看起来不错。我们能再看一下您对所选产品的使用情况吗?如何存储购物车的内容?我将值传递到列表中,然后存储在会话变量中。我将值传递到列表中,然后存储在会话变量中