asp.net – 如何使用带有TemplateFields的ObjectDataSource对GridView进行排序

前端之家收集整理的这篇文章主要介绍了asp.net – 如何使用带有TemplateFields的ObjectDataSource对GridView进行排序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
背景:

我正在使用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:

>寻呼作品
>排序工作
> BoundFields工作
> TemplateFields不起作用

如果EnableSortingAndPagingCallbacks = False:

>寻呼作品
>排序不起作用
> BoundFields工作
> 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事件的异常.

解决方法

属性EnableSortingAndPagingCallbacks告诉控件对数据进行客户端排序,以便控件看起来在没有页面回发的情况下自动排序.此方法不支持TemplateFields.为了使用TemplateFields并执行排序,您需要连接GridView.Sorting事件,并将AllowSorting属性设置为true.完成后,当单击列标题并且可以从那里处理排序逻辑时,应触发事件.

猜你在找的asp.Net相关文章