我有一個ASP .NET頁面,有幾個GridView控件,我正在實現排序和分頁。如何正確使用會話變量進行分頁和排序GridView?
我使用的會話變量來維護一個DataTable代表GridView的數據特定網頁在ViewState像這樣:
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中使用相同的排序事件處理程序。當狀態包中的會話變量如會話[「Page」]正在使用中時,此會話變量是否特定於其Sorting事件觸發的GridView?還是可以通過其他GridView控件使用它進行修改以在同一頁面上進行排序?意思是說,如果我有另外一個也使用Session [「Page」]進行分頁的GridView,會話變量是否在該控件的範圍內?
或者,我應該跟着this post's answer的領先,並只傳遞每個會話的SortDirection?
會話變量的範圍在該會話中全局可用,直到會話結束。因此,會話中的所有GridView控件都可以訪問相同的會話變量並進行修改。如果您爲兩個GridView控件使用Session [「Page」],它們將位於同一頁面上。 – M3NTA7