会话变量应该如何正确地用于GridView的分页和排序

本文关键字:GridView 分页 排序 用于 正确地 变量 会话 | 更新日期: 2023-09-27 18:02:31

我有一个asp.net页面,其中有几个GridView控件,我正在为其实现排序和分页。

我正在使用会话变量来维护一个DataTable,表示ViewState中给定页面的GridView数据,如下所示:

protected void gv_Sorting(object sender, GridViewSortEventArgs e)
{
      // Session["Page"] represents the active page of the GridView 
      // when the Sorting event fires.
      DataTable dt = Session["Page"] as DataTable;
      if (dt != null)
      {       
           if (ViewState["SortDirection"] == null)
           {
                ViewState["SortDirection"] = "DESC";
           }
           string ViewState_SortDirection = ViewState["SortDirection"].ToString();
           for (int i = 0; i <= ((GridView)sender).Columns.Count - 1; i++)
           {
                if (e.SortExpression == ((GridView)sender).Columns[i].SortExpression)
                {
                     if (ViewState["SortDirection"].ToString() == "ASC")
                     {
                          e.SortDirection = SortDirection.Descending;
                          ((GridView)sender).Columns[i].HeaderText = ((GridView)sender).Columns[i].HeaderText + " ▼";
                          ViewState["SortDirection"] = "DESC";
                     }
                     else if (ViewState["SortDirection"].ToString() == "DESC")
                     {
                          e.SortDirection = SortDirection.Ascending;
                          ((GridView)sender).Columns[i].HeaderText = ((GridView)sender).Columns[i].HeaderText + " ▲";
                          ViewState["SortDirection"] = "ASC";
                     }
                }
           }
           DataView dv = new DataView(dt)
           {
                Sort = e.SortExpression + " " + ViewState["SortDirection"]
           };
           gv.DataSource = dv;
           gv.DataBind();
           Session["Page"] = dv.ToTable();
           DataTable dt = Session["Page"] as DataTable;
      }
 }

我想让每个GridView使用相同的排序事件处理程序。当状态包中的会话变量如 session ["Page"]正在使用时,这个会话变量是否特定于GridView的排序事件触发?或者它可以被其他GridView控件使用它在同一页面上排序修改吗?意思是,如果我有另一个GridView也使用会话["页"]分页,会话变量将在该控制的范围?

或者,我应该遵循这篇文章的答案,只传递每个会话的SortDirection吗?

会话变量应该如何正确地用于GridView的分页和排序

以下是可用的数据持久化变量类型及其作用域:

  • 应用程序变量(在所有用户会话之间共享,用于整个应用程序)
  • 会话变量(在所有页面之间共享,用于整个用户会话)
  • ViewState Variables(只存在于页面上,对于整个页面)
  • ControlState Variables(仅存在于页面上,仅用于控件)

如果您将网格数据存储为会话变量,当您在同一页面中使用两个网格时,您将遇到问题。在不了解系统的情况下,我无法给出关于如何存储数据的任何具体建议,但是上面的变量类型可能会为您指明正确的方向