将数据列表从gridview传输到另一个页面

时间:2016-03-28 19:52:39

标签: c# list session gridview

我的gridview看起来像enter image description here

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

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();
}

2 个答案:

答案 0 :(得分:0)

不确定事件的流程。但是,如果我找到你,你希望列表不断添加。你在做什么

 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}

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

答案 1 :(得分:0)

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

 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;




}