2011-07-13 41 views
0

我有一個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?

+1

會話變量的範圍在該會話中全局可用,直到會話結束。因此,會話中的所有GridView控件都可以訪問相同的會話變量並進行修改。如果您爲兩個GridView控件使用Session [「Page」],它們將位於同一頁面上。 – M3NTA7

回答

3

下面是可用的數據持久變量類型和它們的範圍:

  • 應用程序變量(所有用戶會話之間共享,爲整個應用程序)
  • 會話變量(所有頁之間共享,對於整個用戶會話)
  • ViewState的變量(只存在在頁面上,整個頁面)
  • 了ControlState-變量(只存在在頁面上,只是爲了控制)

如果您將網格數據存儲爲會話變量,則當您在同一頁面中使用兩個網格時,會遇到問題。我不能提供關於如何在不知道系統更多信息的情況下存儲數據的任何具體建議,但上面的變量類型可能會指向正確的方向

+0

我使用'List '爲'GridView.DataSource',並且我把'Session'用於Paging and Sorting,並且在另一個頁面中編輯行並返回。 – Kiquenet

相關問題