Почему эта последовательность объектов не будет сортироваться в GridView после привязки? - PullRequest
2 голосов
/ 07 декабря 2010

Эта последовательность, которую я создал, хорошо работает в LINQPad

IQueryable<AccessRequest> filteredRows1;
// retrieve the last record of each request in its request history
filteredRows1 = from req in AccessRequestSet
    group req by req.TaskReferenceId
    into g
    let topReq = g.OrderByDescending(r => r.UpdateDate).FirstOrDefault()
    select topReq;

IQueryable<AccessRequest> filteredRows = 
    filteredRows1.Where(o => o.Status == "Requested");

Я хочу затем отсортировать эти объекты по полю, RequestedReleaseTime.

filteredRows.OrderBy(p => p.RequestedReleaseTime);

Опять я группирую по одному DateTimeуспешно, а затем успешно сортируется по другому DateTime, подтверждается в LINQPad.Затем я добавляю это как DataSource и привязываю к своему GridView:

gvRequests.DataSourceID = string.Empty;
            gvRequests.DataSource = filteredRows;
            gvRequests.DataBind();

Я даже установил AllowSorting = "true" и добавил эту строку в Sort.

gvRequests.Sort("RequestedReleaseTime", SortDirection.Ascending);

Я пробовал эту последнюю строку до и после DataBind безрезультатно.Что не так с этим подходом?Должен ли я делать что-либо из этого в событиях OnSorted или OnSorting?Примечание: я попробовал это и получил StackOverflowException, который напомнил мне, что я должен спросить вас, ребята.Спасибо миллионам за любое направление или помощь, которую я получаю.

1 Ответ

1 голос
/ 07 декабря 2010

Вызов OrderBy на самом деле не изменяет исходный запрос, но вместо этого возвращает новый запрос, основанный на оригинале, который вам нужно получить:

var filteredRowsOrdered = filteredRows.OrderBy(p => p.RequestedReleaseTime);

Я полагаю, что "sort" gridview предназначен для работы с чем-то вроде ObjectDataSource, который знает, как вызывать метод для извлечения данных и передачи строки сортировки в этот метод. К сожалению, это не очень хорошо работает с Entity Framework. Мы придумали некоторые приемы, чтобы наши классы доступа к данным выяснили, как преобразовать выражение сортировки в оператор q = q.OrderBy(...). Но это может быть сложно.

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