2011-02-02 69 views
1

我有一個UpdatePanel與排序啓用GridView和事件處理程序如下:的GridView:捕捉排序方向

protected void MyGridSort(object sender, GridViewSortEventArgs e) 
{ 
    var TheDirection = (e.SortDirection).ToString(); 
    var TheColumn = (e.SortExpression).ToString(); 
} 

我把一個斷點,只是這些行之後。每次按列標題時,我的變量TheDirection始終顯示爲升序。

爲什麼它不會從上升到下降和返回?

謝謝。

回答

1

您可以在ViewState或Session中保持方向。像這樣(未測試的代碼):

protected void MyGridSort(object sender, GridViewSortEventArgs e) 
{ 
    var TheDirection = (e.SortDirection).ToString(); 
    var TheColumn = (e.SortExpression).ToString(); 

    string prevColumn = "", prevDirection = ""; 

    if (Session["MyGridSortColumn"] != null) 
     prevColumn = Session["MyGridSortColumn"].ToString(); 
    if (Session["MyGridSortDirection"] != null) 
     prevDirection = Session["MyGridSortDirection"].ToString(); 

    if (TheColumn == prevColumn) { 
     if (prevDirection == "ASC") 
     TheDirection = "DESC"; 
     else 
     TheDirection = "ASC"; 
    } 

    Session["MyGridSortDirection"] = TheDirection; 
    Session["MyGridSortColumn"] = TheColumn; 

} 
+1

無需使用Session變量或查看狀態變量,你可以在GridView的`SortDirection直接存儲`和`SortExpression`屬性。 – 2011-02-02 03:08:46

2

我一直在閱讀和排序似乎打破,當你手動提供GridView的數據源。不知道如果這是你的情況,但是這對我的作品..

string strSortExpression = e.SortExpression + " ASC"; 
if (Convert.ToString(ViewState["SortExpression"]) == strSortExpression) 
{ 
    strSortExpression = e.SortExpression + " DESC"; 
} 
ViewState["SortExpression"] = strSortExpression; 


//This is done by sorting the Default View of the underlying data and then re-binding this 
//to the grid. 
System.Data.DataTable myData = HttpContext.Current.Session["GridData"] as System.Data.DataTable; 
if (myData != null) 
{ 
    myData.DefaultView.Sort = strSortExpression; 
    GridView1.DataSource = myData; 
    GridView1.DataBind(); 
} 

希望它有助於

+0

謝謝,我已經整理出來了。 – frenchie 2011-06-01 19:07:53