【问题标题】:Transfer list of data from gridview to another page将数据列表从gridview传输到另一个页面
【发布时间】:2016-03-31 05:01:19
【问题描述】:

我的gridview看起来像这样

每当用户单击书签按钮时,我想将该行的 ProgramID 发送到列表并使用 Session 将其传输到另一个页面。但我的 gridview 传输所有 programID,即使该 ID 存在于列表中。我究竟做错了什么? 这是书签按钮的代码:

protected void btnSelect_Click(object sender, EventArgs e)
{


   Button b = (Button)sender;      
    GridViewRow row = (GridViewRow)b.NamingContainer;
    var ProgramID = row.FindControl("lblProgramID") as Label;
    string stringProgramID = ProgramID.Text;      
    List<string> bookmarkPrograms = (List<string>)Session["BookmarkProgram"];
    if (bookmarkPrograms == null)
        bookmarkPrograms = new List<string>();
    bookmarkPrograms.Add(stringProgramID);
    Session["BookmarkProgram"] = bookmarkPrograms;

}

这是另一个页面中gridview的代码:

 protected void Page_Load(object sender, EventArgs e)
{
    List<string> bookMarkPrograms = (List<string>)Session["BookmarkProgram"];

    GridView1.DataSource = bookMarkPrograms;
    GridView1.DataBind();
}

【问题讨论】:

    标签: c# list session gridview


    【解决方案1】:

    只是想为将来需要的人发布整个解决方案:

     protected void btnBookmark_Click(object sender, EventArgs e)
    {
    
    
        Button b = (Button)sender;      
        GridViewRow row = (GridViewRow)b.NamingContainer;
        var ProgramID = row.FindControl("lblProgramID") as Label;
        string stringProgramID = ProgramID.Text;      
        List<string> bookmarkPrograms = (List<string>)Session["BookmarkProgram"];
        if (bookmarkPrograms == null)
            bookmarkPrograms = new List<string>();
    
    
        if (bookmarkPrograms.Any(c => c.Equals(stringProgramID)))
        {
            FormMessage.Text = "You bookmarked this program already";
        }
        else
        {
            bookmarkPrograms.Add(stringProgramID);
        }
        Session["BookmarkProgram"] = bookmarkPrograms;
    
    
    
    
    }
    

    【讨论】:

      【解决方案2】:

      不太确定事件的流程。但是,如果我理解正确,您希望列表不断添加。你在做

       Session["BookmarkProgram"] = bookmarkPrograms;
      

      这意味着这个变量就是那个特定的值。但是如果你再次这样做,就会发生这种情况:

         List<string> bookmarkPrograms = new List<string>();
      

      所以你正在删除旧的。到目前为止,制作一种获取列表的方法,如果为 null 或为空,则创建一个新列表。否则不要,否则你会清空你到目前为止所拥有的东西。

      更新:你可以试试这个:

      List<string> bookmarkPrograms = (List<string>)Session["BookmarkProgram"] == null ? new List<string>():(List<string>)Session["BookmarkProgram"];
      

      用于检查该值是否已经存在:

      if (bookmarkPrograms.Any(c=>c.Equals(ProgramID)){//don't add}
      

      inside 表达式返回一个布尔值,当列表中的值等于您要比较的值时为真。此示例假定 ProgramID 是一个字符串。由于它们是字符串,您可能想要添加 trim() 和 tolower() 但在这种情况下似乎不会意外添加空格......或者该大小写可能会影响。由于它在存在时返回 true,所以在它前面添加一个 !,以便它在它不存在时添加到列表中。

      【讨论】:

      • 是的,你是对的。我必须添加一些类似的东西: if (bookmarkPrograms == null) bookmarkPrograms = new List();到我的代码中第一次创建新列表,如果是第二次,请继续添加更多字符串。
      • 我更新了另一个在一行中执行该逻辑的建议
      • 感谢您的回答。我刚刚在#1 帖子中发现并更新了我的代码。现在,只要用户单击该按钮,它就会传输所有程序 ID,但问题是它不断将字符串添加到列表中,即使该程序 ID 已经存在于列表中。你知道怎么做吗?检查列表中的值??
      • 只添加最后一个怎么样?那行得通吗?无论如何,要检查是否存在某些内容,您将获得要添加到列表中的值,然后获得列表,然后询问 bookmarkPrograms.Any(c=>c.equals(stringProgramID))。我会更新并解释得更好。
      • 感谢您的回答。我最终得到了这样的代码,它运行良好: if (bookmarkPrograms == null) bookmarkPrograms = new List(); if (bookmarkPrograms.Any(c => c.Equals(stringProgramID))) { FormMessage.Text = "你已经为这个程序添加了书签"; } 其他 { 书签程序。添加(字符串程序 ID); } Session["BookmarkProgram"] = bookmarkPrograms;
      猜你喜欢
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 2015-02-01
      • 1970-01-01
      • 2020-11-20
      • 2011-11-01
      相关资源
      最近更新 更多