Gridview: захват направления сортировки - PullRequest
1 голос
/ 02 февраля 2011

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

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

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

Почему он не переключается с восходящего на нисходящий и обратно?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Я читал, и сортировка, кажется, прерывается, когда вы вручную предоставляете 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();
}

надеюсь, это поможет

1 голос
/ 02 февраля 2011

Вы можете сохранить направление в 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;

}
...