2011-11-11 23 views
0
//Sort User Table 
private void SortGridView(string sortExpression, string direction) 
{ 
    DataTable dataTable = BindGridView(Session["useremail"].ToString()).Tables[0]; 
    if (dataTable != null) 
    { 
     DataView dataView = new DataView(dataTable); 
     dataView.Sort = sortExpression + direction; 

     UserTable.DataSource = dataView; 
     UserTable.DataBind(); 
    } 
} 

protected void gridView_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    string sortExpression = e.SortExpression; 
    if (GridViewSortDirection == SortDirection.Ascending) 
    { 
     GridViewSortDirection = SortDirection.Descending; 
     SortGridView(sortExpression, " ASC"); 
    } 

    else 
    { 
     GridViewSortDirection = SortDirection.Ascending; 
     SortGridView(sortExpression, " DESC"); 
    } 
} 

public SortDirection GridViewSortDirection 
{ 
    get 
    { 
     if (ViewState["sortDirection"] == null) 
      ViewState["sortDirection"] = SortDirection.Ascending; 
     return (SortDirection)ViewState["sortDirection"]; 
    } 
    set { ViewState["sortDirection"] = value; } 
} 

當我編輯用戶和更新編輯或做一些搜索和清除搜索頁面加載和排序丟失,DataGrid中排序失去了頁面加載

private DataSet BindGridView(string email) 
    { 
     ....... 
    } 

protected void btnUpdate_Click(object sender, EventArgs e) 
    { 
     ..... 
     BindGridView(Session["useremail"].ToString()); 
    } 

每次頁面加載或一些回發完成排序失去了如何保持排序。

頁面加載

if (PermissionList.Any(item => item.Equals("Edit user")))   
    {    
      if (!IsPostBack) 
      { 
       BindGridView(Session["useremail"].ToString()); 
      } 
     } 
+0

什麼在你的Page_Load? –

+1

這基本上是您之前詢問的相同問題。在綁定()數據的任何地方,您還必須在綁定之前對其進行排序,以便數據在綁定到控件時進行排序。 – Lloyd

+0

打算髮表一個答案,但勞埃德是我。他的評論是正確的答案。 –

回答

0

每當您在gridview上執行新的排序時,將排序表達式存儲在隱藏的標籤或字段中,並且只要您重新加載/綁定了gridview,就可以使用保存的排序表達式對錶進行重新排序。

的.aspx

<asp:Label id="lblHidSortExp" runat="server" visible="false"></asp:Label> 

.aspx.cs

protected void gridView_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    string sortExpression = lblHidSortExp.Text; 
    if(sortExpression == e.SortExpression) 
     sortExpression += " DESC"; 
    else 
     sortExpression == e.SortExpression; 

    //not sure if this is exactly how you get your datatable, but you get the idea 
    DataView myView = new DataView(BindGridView(Session["useremail"].ToString()).Tables[0]); 
    myView.Sort = sortExpression; 
    marksGridView.DataSource = myView; 
    marksGridView.DataBind(); 

    //save sort state 
    lblHidSortExp.Text = sortExpression; 
} 

在您的更新功能,所以說,用你的排序保存EXP

protected void btnUpdate_Click(object sender, EventArgs e) 
{ 
    .....//do update in db 
    //reload your table in dataview 
    DataView myView = new DataView(/*load table*/); 
    //do sort 
    myView.Sort = lblHidSortExp.Text; 
    //bind gridview 
    marksGridView.DataSource = myView; 
    marksGridView.DataBind(); 
} 
+0

如何將排序表達式存儲在隱藏標籤中,任何代碼都將有所幫助。謝謝 – Mark

+0

@Mark更新了我的答案。指導,希望它有助於:) –

0

我有一個類似的問題,我aproached這是保存在會話排序值的方式,那麼就重置它們在Page_Load中,他們丟失了。

+0

你不需要使用會話內存這個 –

+0

@Shredder我會按照你在這裏暗示的方式來看待自己隱藏的字段。謝謝 – Purplegoldfish