【问题标题】:AspxGridView ObjectDataSource sortingAspxGridView ObjectDataSource 排序
【发布时间】:2013-09-10 13:18:49
【问题描述】:

我正在从 ASP.NET GridView 移植到 DevExpress AspxGridView,并且我使用的是相同的 ObjectDataSource,但是现在当我单击标题时它会抛出:

"数据源 'xxx' 不支持使用 IEnumerable 数据进行排序。 只有 DataView、DataTable 和 数据集。”

但这对 GridView 来说效果很好,所以我怀疑这真的是 'xxx' 的错。在旧的 gridview 分页上,排序很好。现在分页仍然有效(当我使用“DataSourceForceStandardPaging”时)。

如何使它与 AspxGridView 一起工作?

【问题讨论】:

  • 可以使用customsorting在aspxgridview中实现排序

标签: asp.net sorting devexpress objectdatasource aspxgridview


【解决方案1】:

您可以使用自定义规则实现 ASPxGridView 排序,需要将列的Settings.SortMode 属性设置为“Custom”并处理ASPxGridView.CustomColumnSort 事件(如相应主题所示)。但是,不应禁用 Settings.AllowSort 选项。

自定义排序示例:

RepositoryItemHyperLinkEdit hlnkEditor;
private void GridCustomSortTest_Load(object sender, EventArgs e)
{
    string[] months = new string[] { "January", "February", "March", 
        "April", "May", "June", "July", "August", "September", 
        "October", "November", "December" };
    hlnkEditor = new RepositoryItemHyperLinkEdit();
    //hlnkEditor.Buttons[0].Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph;

    grid.DataSource = months;
    grid.RefreshDataSource();
    gridView1.Columns[0].SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom;
    gridView1.Columns[0].ColumnEdit = hlnkEditor;
    gridView1.CustomColumnSort += new DevExpress.XtraGrid.Views.Base.CustomColumnSortEventHandler(gridView1_CustomColumnSort);


}

void gridView1_CustomColumnSort(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnSortEventArgs e)
{
    e.Result = Comparer<int>.Default.Compare(e.ListSourceRowIndex1,
       e.ListSourceRowIndex2);

    e.Handled = true;
}

希望对您有所帮助..

编辑: 对于服务器端排序和分页,请通过示例 - Bind a grid to a ObjectDataSource with EnablePaging 并查看另见链接。

更多参考:
How can I get the grid to sort my ObjectDataSource on the server?
Passing Gridview Paging/Sorting/Grouping/Filtering expressions to business logic Select Methods
ASPxGridView - ObjectDataSource Paging and Filtering
Performance comparison of XPO and Entity Frameworks, and ObjectDataSource

大数据绑定:
Binding to Data
Binding to Large Data (Database Server Mode)
A possible implementation of IListServer interface to achieve Server Mode functionality

【讨论】:

  • 抱歉,这里是晚上。这适用于分页,还是仅对实际页面进行排序(客户端排序)?我需要服务器端排序。之前效果很好。一个“order by”列被发送到 GetData 方法,我在服务器端对数据进行了排序。这没有改变,但是 AspxGridView 抛出了那个奇怪的消息。
  • 你在吗?我该如何实现服务器排序(我有 100,000 行)?
  • 我正在检查它。当时我正在阅读“将网格绑定到...”文章。所以我想我需要将对象转换为 DataTable。因为我不会跨客户端/服务器边界发送 DT(它被序列化为 xml => ~10x 大小)。所以我需要在一个客户端构建它。我不清楚为什么 DT 起作用,而普通列表不起作用(主要是排序)。当我返回已经排序的数据部分(页面)时。可能在某处有一些 if(来源是 DataTable)。
  • 我确实尝试了 IListSource,它只返回了第一页(其他页面为空),但是当我点击列标题时它没有反应 -> 即排序。我已经尝试过 ObjectDataSource(将输出转换为 DataTable)。分页仍然可以正常工作,并且排序不会引发异常,但它也不会对标题单击做出反应。我应该以某种方式手动调用它吗? (当我单击排序,然后单击未缓存的页面时,它会使用更新/正确的“orderBy”参数请求数据)
  • 网格只执行客户端排序,我仍然无法在点击列标题时强制它请求页面数据。
猜你喜欢
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多