gpt4 book ai didi

asp.net - 如何使用 ObjectDataSource 和 TemplateFields 在 GridView 上排序

转载 作者:行者123 更新时间:2023-12-03 22:01:27 27 4
gpt4 key购买 nike

背景:

我正在使用 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 工作
  • 模板字段做 不是 工作

  • 如果 EnableSortingAndPagingCallbacks = False:
  • 寻呼工程
  • 排序确实不是 工作
  • BoundFields 工作
  • 模板字段工作


  • 我的问题:

    如何让分页、排序和模板字段同时工作?

    实现说明:

    将 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 并执行排序,您需要连接 GridView.Sorting 事件,并将 AllowSorting 属性设置为 true。完成后,当单击列标题时应触发该事件,并且可以从那里处理排序逻辑。

    关于asp.net - 如何使用 ObjectDataSource 和 TemplateFields 在 GridView 上排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1002196/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com