Справочная информация:
Я работаю с GridView и ObjectDataSource. Я использую пейджинг и сортировку.
В источнике ObjectData:
objectDataSource.TypeName = value;
objectDataSource.SelectMethod = "Select";
objectDataSource.SelectCountMethod = "SelectCount";
objectDataSource.SortParameterName = "sortExpression";
objectDataSource.EnablePaging = true;
На GridView:
gridView.AllowPaging = true;
gridView.AllowSorting = true;
gridView.DataSource = objectDataSource;
Чтобы пейджинг и сортировка работали, я установил «EnableSortingAndPagingCallbacks» в True. Раньше я получал «System.Web.HttpException: сортировка запускаемых событий GridView, которая не была обработана». и это исправляет.
Если я использую только BoundFields в моем GridView, это замечательно и отлично работает.
Однако, если я использовал TemplateFields, я получаю «NotSupportedException: обратные вызовы не поддерживаются в TemplateField, поскольку некоторые элементы управления не могут корректно обновляться в обратном вызове. Отключите обратные вызовы в GridView.»
Что, имеет смысл. Мне просто нужно знать, как заставить работать сортировку без использования EnableSortingAndPagingCallbacks.
Если EnableSortingAndPagingCallbacks = True:
- Пейджинговые работы
- Сортировочные работы
- Работа BoundFields
- TemplateFields делают Не Работа
Если EnableSortingAndPagingCallbacks = False:
- Пейджинговые работы
- Сортировка Не Работа
- Работа BoundFields
- Работа с TemplateFields
Мой вопрос:
Как мне заставить работать пейджинг, сортировку и TemplateFields одновременно,
Разъяснения по реализации:
Использование ObjectDataSource с GridView требует реализации метода Select, который предоставляет выражение сортировки, количество возвращаемых строк и начальную строку:
public IEnumerable<CountyAndStateGridRow> Select(string sortExpression, int maximumRows, int startRowIndex)
{
string oql = "select County order by {" + sortExpression + "}" ;
var counties = QueryProvider.ExecuteQuery(oql).Cast<County>();
var page = counties.Skip(startRowIndex).Take(maximumRows);
var rows = page.Select(
county => new CountyAndStateGridRow
{
CountyName = county.Name,
StateName = county.State.Name,
});
return rows;
}
Определенное выражение SortExpression определено в aspx / ascx:
<Columns>
<asp:BoundField HeaderText="County Name" DataField="CountyName" SortExpression="Name" />
<asp:BoundField HeaderText="State Name" DataField="StateName" SortExpression="State.Name" />
</Columns>
Это , предполагается, что будет передано и вызовет метод Select для ObjectDataSource при щелчке по столбцу, но, похоже, он не работает, если EnableSortingAndPagingCallbacks = true, и вместо этого я получаю исключение о Событие сортировки не определено.