сортировать столбцы gridview в asp.net c # - PullRequest
7 голосов
/ 17 октября 2008

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

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

Спасибо!

Ответы [ 7 ]

9 голосов
/ 10 декабря 2008

Есть две вещи, которые нужно сделать, чтобы понять это правильно.

  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);
}

дБ. Products.SortBy (e.SortExpression, e.SortDirection)

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

2 голосов
/ 17 октября 2008
0 голосов
/ 24 октября 2008

наполовину псевдокод для 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();
}
0 голосов
/ 23 октября 2008

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

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

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

0 голосов
/ 17 октября 2008

Когда я делаю это в одиночку, выдает ошибку Событие "GridView 'GridView1' сработало Сортировка, которая не была обработана.

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

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

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

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

<asp:GridView ID="gvMyGridView" runat="server" DataSourceID="dsMyDataSource" ... />
0 голосов
/ 17 октября 2008

добавить:

  AllowSorting="true"

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

0 голосов
/ 17 октября 2008

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

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