Сортировать столбцы gridview в asp.net C#

Может ли кто-нибудь указать функции для сортировки столбцов gridview в C# asp.net.

Связь данных с gridview берется из контекста данных, созданного с помощью linq. Я хотел щелкнуть заголовок столбца, чтобы отсортировать данные.

Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
34 658
7

Ответы 7

http://msdn.microsoft.com/en-us/library/ms745786.aspx

http://aspnet.4guysfromrolla.com/articles/012308-1.aspx

Статья MSDN работает отлично, за исключением того, что вам нужно изменить одну строку кода в файле .cs: string header = ((Binding)headerClicked.Column.DisplayMemberBinding).Path.Pa‌​th; Код в MSDN, сортировка будет работать только в том случае, если заголовок и имя столбца точно такие же.

Jared Harley 05.10.2009 21:56

дополнительную информацию о сортировке в представлении сетки можно найти здесь: Сортировка MSDN Gridview методология, используемая для получения данных, не имеет значения, вы можете использовать ту же сортировку.

добавлять:

  AllowSorting = "true"

к тегу <asp:GridView />, который должен это сделать

Если вы просто сделаете это, выдает ошибку The GridView 'GridView1' fired event Sorting which wasn't handled.

Mark Byers 02.02.2012 13:46

When I do that Alone it gives an error "The GridView 'GridView1' fired event Sorting which wasn't handled.

У меня такое случалось раньше ... Я только что создал одноразовый обработчик, и после этого все, казалось, начало работать. Не самое красивое решение, но у меня оно сработало.

Тем не менее, я не видел ссылки на источник данных в вашем коде GridView. Вам понадобится что-то вроде этого:

<asp:LinqDataSource ID = "dsMyDataSource" runat = "server"
DataContextTypeName = "MyDataContext"
TableName = "MyTable"
AllowSort = "true" />

А затем в вашем GridView:

<asp:GridView ID = "gvMyGridView" runat = "server" DataSourceID = "dsMyDataSource" ... />

На панели свойств дважды щелкните элемент «Сортировка». Будет создана новая функция. В этой функции напишите код для заполнения таблицы. Единственное отличие - изменить запрос на основе GridViewSortEventArgs e

e.SortExpression и
e.SortDirection всегда по возрастанию :-(

Я надеюсь, что этот очень короткий ответ поможет

Половинный псевдокод для SQL-запроса

string Query= string.Empty;
string SortExpression = string.Empty;

// HDFSort is an HiddenField !!!

protected void SortCommand_OnClick(object sender, GridViewSortEventArgs e)
{
   SortExpression = e.SortExpression; 
   Query = YourQuery + " ORDER BY "+SortExpression +" "+ HDFSort.Value ;
   HDFSort.Value = HDFSort.Value== "ASC" ? "DESC" : "ASC";
   RefreshGridView();
}

protected void RefreshGridView()
{
   GridView1.DataSource = DBObject.GetData(Query);
   GridView1.DataBind();
}

Чтобы сделать это правильно, вам нужно сделать 2 вещи.

  1. Сохраняйте состояние сортировки как viewstate (SortDirection и SortExpression)
  2. Вы создаете правильное выражение linq на основе текущего состояния сортировки.

Вручную обработайте событие Сортировка в сетке и используйте этот помощник, который я написал для сортировки по SortExpression и SortDirection:

public static IQueryable<T> SortBy<T>(IQueryable<T> source, string sortExpression, SortDirection direction) {
    if (source == null) {
        throw new ArgumentNullException("source");
    }

    string methodName = "OrderBy";
    if (direction == SortDirection.Descending) {
        methodName += "Descending";
    }

    var paramExp = Expression.Parameter(typeof(T), String.Empty);
    var propExp = Expression.PropertyOrField(paramExp, sortExpression);

    // p => p.sortExpression
    var sortLambda = Expression.Lambda(propExp, paramExp);

    var methodCallExp = Expression.Call(
                                typeof(Queryable),
                                methodName,
                                new[] { typeof(T), propExp.Type },
                                source.Expression,
                                Expression.Quote(sortLambda)
                            );

    return (IQueryable<T>)source.Provider.CreateQuery(methodCallExp);
}

db.Products.SortBy (e.SortExpression, e.SortDirection)

Посмотрите мой пост в блоге, как это сделать:

Как ваш метод сортировки может обрабатывать подобъекты. Например. у вас есть объект Order, который содержит order.comment.rating, и вы хотите отсортировать его по рейтингу?

Dofs 09.05.2009 13:36

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

davidfowl 29.05.2009 03:39

Другие вопросы по теме