2012-01-09 122 views
3

我有一個網格視圖,我正在實現分頁和排序。當我對錶進行排序,然後選擇2頁,則排序會丟失,在GridView控件綁定在asp.net中進行分頁和排序的問題gridview

private DataSet BindGridView(string field) 
     { 
     DataSet ds = new DataSet() 
     string userQuery = "Select tbl_User.UserID, tbl_User.FirstName from tbl_user order by tbl_user.UserID desc"; 
     UserTable.DataBind(); 
      return ds; 
     } 



<asp:GridView ID="UserTable" runat="server" PageSize="20" AllowPaging="True" 
        SelectedIndex="0" DataKeyNames="UserID" OnRowDataBound="UserTable_RowDataBound"     
    AutoGenerateColumns="false" OnPageIndexChanging="gridView_PageIndexChanging" AllowSorting="true" OnSorting="gridView_Sorting"> 

我怎樣才能留住排序和執行尋呼提到的第二個20條記錄顯示在遞減,我存儲在會話中排序狀態,我如何使用它來執行分頁。

protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e) 
     { 
      UserTable.PageIndex = e.NewPageIndex;   
      UserTable.DataBind(); 
      DataView myView = new DataView(BindGridView(Session["useremail"].ToString()).Tables[0]); 
     } 

    protected void gridView_Sorting(object sender, GridViewSortEventArgs e) 
     { 
      string sortExpression = null; 
      if ((Session["UsersortExpression"] == null)) 
      { 
       sortExpression = null; 
      } 
      else 
      { 
       sortExpression = (Session["UsersortExpression"].ToString()); 
      } 
      if (sortExpression == e.SortExpression) 
      { 
       sortExpression += " DESC"; 
      } 
      else 
      { 
       sortExpression = e.SortExpression; 
      } 
      DataView myView = new DataView(BindGridView(Session["useremail"].ToString()).Tables[0]); 
      myView.Sort = sortExpression; 
      UserTable.DataSource = myView; 
      UserTable.DataBind(); 
      //save sort state 
      Session.Add("UsersortExpression", sortExpression); 
     } 
+0

好像你正在重新綁定你的頁面索引中的網格,並在你的BindGridView中再次改變。不要多次重新綁定網格。只要確保你的BindGridView方法在檢查了你的pageindex和排序邏輯之後做了綁定。 – Rajesh 2012-01-09 17:26:19

+0

如果我沒有從分頁代碼隱藏中調用bindgridview,那麼頁面2沒有被填充,它沒有記錄。我該怎麼做,你可以展示一些代碼 – Murthy 2012-01-10 10:00:24

回答

0

請參閱此article關於在asp.net gridview中的分頁和排序。

希望有所幫助。

2

你可以申請使用ViewState的字符串瓦爾來存儲您的源查詢排序排序和排序方向

確保ViewState的瓦爾被設置爲默認設置:

ViewState["sortDir"] = "DESC"; 
ViewState["sortField"] = "tbl_user.UserID"; 

然後,修改您的查詢字符串:

string userQuery = 
"Select tbl_User.UserID, tbl_User.FirstName " + 
"from tbl_user " + 
"ORDER BY " + (String)ViewState["sortField"] + " " + (String)ViewState["sortDir"]; 

包括在OnSorting:

protected void gridView_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    // Set new sort direction and sort field 
    if ((String)ViewState["sortDir"] == "DESC"){ViewState["sortDir"] = "ASC";} 
    else { ViewState["sortDir"] = "DESC"; } 
    ViewState["sortField"] = e.SortExpression; 

    // Rebind 
    ...  
} 

這樣,你的源數據進行預排序,你不必擔心使用myView.Sort或運行到任何分頁/排序衝突。