我有一个带有几个 GridView 控件的ASP .NET页面,我正在实现排序和分页。
我正在使用会话变量来维护一个表示ViewState中GridView数据的给定页面的DataTable,如下所示:
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控件修改使用它在同一页面上排序?这意味着,如果我有另一个也使用Session [“Page”]进行分页的GridView,那个会话变量是否会在该控件的范围内?
或者,我是否应该跟随this post's answer的引导并且仅为每个会话传递SortDirection?
答案 0 :(得分:3)
以下是可用的数据持久变量类型及其范围:
如果将网格数据存储为会话变量,则在同一页面中使用两个网格时会遇到问题。我不能在不了解系统的情况下提供有关如何存储数据的任何具体建议,但上述变量类型可能指向正确的方向