2011-02-02 3 views
1

У меня есть GridView в качестве UpdatePanel с сортировкой включен и обработчик события следующим образом:Gridview: захватывая направление сортировки

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

я поставил точку останова только после того, как эти строки. Каждый раз, когда я нажимаю заголовок столбца, моя переменная TheDirection всегда показывает «Восхождение».

Почему он не переключается с возрастания на убыв и обратно?

Спасибо.

ответ

1

Вы можете сохранить направление в ViewState или сеансе. Как это (непроверенный кодекс):

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 или просмотреть переменную состояния, вы можете сохранить его непосредственно в 'SortDirection в GridView в 'и' SortExpression'. –

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

Смежные вопросы