我正在使用GridView和ObjectDataSource.我正在实施分页和排序.
在ObjectDataSource上:
- 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触发的事件排序,但没有处理.”这解决了它.
如果我在GridView中只使用BoundFields,这很好并且工作正常.
但是,如果我使用TemplateFields,我会收到“NotSupportedException:TemplateField不支持回调,因为某些控件无法在回调中正确更新.在GridView上关闭回调.”
哪个,有道理.我只需要知道如何在不使用EnableSortingAndPagingCallbacks的情况下进行排序.
如果EnableSortingAndPagingCallbacks = True:
>寻呼作品@H_502_23@>排序工作@H_502_23@> BoundFields工作@H_502_23@> TemplateFields不起作用
如果EnableSortingAndPagingCallbacks = False:
>寻呼作品@H_502_23@>排序不起作用@H_502_23@> BoundFields工作@H_502_23@> TemplateFields工作
我的问题:
如何让Paging,Sorting和TemplateField同时工作?
澄清实施情况:
将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>
这应该被传入并在单击列时调用ObjectDataSource上的Select方法,但是如果EnableSortingAndPagingCallbacks = true则它似乎不起作用,而是我得到关于未定义Sorting事件的异常.