как отсортировать строки Gridview по несвязанному столбцу шаблона - PullRequest
1 голос
/ 22 марта 2010

Я хочу отсортировать строки Gridview по столбцу шаблона, который не привязан ни к какому полю базы данных.В этом шаблоне просто есть метка, текст которой я задал в коде, в зависимости от значения в другом столбце с привязкой к данным.Так что я застрял на том, как установить его sortExpression, поскольку он не связан со столбцом.

1 Ответ

0 голосов
/ 22 марта 2010

Ваше желаемое поведение возможно. Вот что вам нужно сделать:

1) Подписаться на событие сортировки GridView.
2) Добавьте выражение SortExpression в столбец создания, например «MyOwnSortExpression». 2) В обработчике событий у вас есть доступ к выражению SortExpression через EventArgs. e.SortExpression 3) Создайте метод, который выполняет привязку данных в GridView. Этот метод имеет 2 параметра. Первый - это имя столбца, который должен быть отсортирован, а второй - Sortdirection. (было бы неплохо переключить направление сортировки после двойного щелчка по одному и тому же столбцу) 4) Добавьте переключатель кода, который выполняет сортировку вручную только по нужному столбцу.

Пример

protected void gv_Sorting(object sender, GridViewSortEventArgs e)
{
  if(e.SortExpression == MyOwnSortExpression)
  {
     UpdateDataBinding(e.SortExpression, e.SortDirection);   
     e.Cancel = true;
     return;
  }
}

protected void UpdateDataBinding(String sortexpression, SortDirection direction)
{
  switch(sortExpression)
  {
    case "MyOwnSortExpression":
      var myData = GetYouSpecificDataFromDB();
      if(direction == SortDirection.Ascending)
      {
       var = var.OrderBy(x => string.format("jkalsd{0}", x.TheSpecifiedDBColumn)) // or any desired linq expression);
      }
      else
      {
       var = var.OrderByDescending(x => string.format("jkalsd{0}", x.TheSpecifiedDBColumn)) // or any desired linq expression);
      }
      this.gv.DataSource = var.ToList();
      this.gv.DataBind();
      break;
  }
}

Вы можете добавить кэширование для направления сортировки и столбца сортировки, чтобы включить механизм переключения.

Ваше решение может отличаться в зависимости от типа привязки данных, которую вы делаете (Linq-to-Sql, ObjectDataSource, ...)

Эта ссылка http://blogs.sftsrc.com/stuart/archive/2009/02/19/130.aspx также предоставляет хороший класс. Лучше всего работает, если вы можете создать класс Wrapper, содержащий все значения, которые будут отображаться. Предлагаемое мной решение не нуждается в классе-обертке, но ему не хватает гибкости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...