会话变量应该如何正确地用于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吗?以下是可用的数据持久化变量类型及其作用域:
- 应用程序变量(在所有用户会话之间共享,用于整个应用程序)
- 会话变量(在所有页面之间共享,用于整个用户会话)
- ViewState Variables(只存在于页面上,对于整个页面)
- ControlState Variables(仅存在于页面上,仅用于控件)
如果您将网格数据存储为会话变量,当您在同一页面中使用两个网格时,您将遇到问题。在不了解系统的情况下,我无法给出关于如何存储数据的任何具体建议,但是上面的变量类型可能会为您指明正确的方向