如何在DevExpress GridView中设置默认排序

4
在 .net WinForm 中,DevExpress 的 GridControl/GridView 绑定在一个 DataSet 上,如何指定默认排序顺序?即当没有可见的 GridColumn 具有 SortOrder 时使用的排序顺序。
默认情况下,我在我的隐藏 DateTimeStamp GridColumn 上设置了视图排序。当用户点击列时,它会被覆盖。 用户可以使用列上的菜单或按住 Control 键单击列来“清除排序”。这样做时,行不再排序(或者可能按 PK 排序?),而我希望它们按 DateTimeStamp 排序。
有什么想法吗?也许通过插入代码来通知用户“清除排序”时进行处理?我可以使用 GridView.PopupMenuShowing 和 GridStringId.MenuColumnClearSorting 处理用户点击菜单的情况。但它无法处理 Control+click 的情况。
有人遇到过同样的问题并找到了(简单的)解决方案吗?

1
简单地说:((DataView) gridControl.DataSource).Sort = "DateTimeStamp DESC"; - Olivier de Rivoyre
6个回答

2
如果我是您,我会根据所需的列对网格的数据源进行排序。 在这种情况下,如果网格视图的排序条件由最终用户清除,则数据将按照数据源指定的顺序显示。 更新: 以下代码应该适用于您:
DataView dv = yourDataTable.DefaultView;
dv.Sort = "SomeField";
gridControl.DataSource = dv;

此外,请查看以下 MSDN 文章:
数据视图排序属性。 DataView.Sort Property

我的数据源是一个System.Data.DataTable。与List<>不同,dataTable上没有Sort()方法(需要检查)。也许通过更改表的PrimaryKey可以实现排序,但这会对现有代码进行很多更改,而收益却很少。首先尝试EndSorting事件解决方案。 - Olivier de Rivoyre
EndSorting解决方案无效。更改PrimaryKey解决方案也无效。您的解决方案使用dataTable.Rows.InsertAt(row, position)和Remove()在每次更新时维护行顺序。我认为我可以创建一个过程,使用dataTable.Select("", "LastUpdateDate, Id")并同时循环结果和原始表格来删除不在其位置上的行并重新创建它并将其插入到正确的位置。我担心每次更新后我的单元格编辑器会有一些焦点问题。有没有更简单的解决方案? - Olivier de Rivoyre
如果我的数据源不是DataView,或者没有呢? - Guillermo Gutiérrez

1

禁用最终用户排序不是最简单的方法吗?或者我误解了你的问题 - 也就是说,你想在默认排序之后应用他们的排序吗?


我想让用户能够对网格进行排序,并在没有用户筛选器时有可能返回默认排序。如果用户没有指定筛选器,我希望我的筛选器被应用。 - Olivier de Rivoyre

1
只需将此代码放在构造函数的 InitializeComponent(); 后面。
GridView1.Columns["FieldName"].SortOrder = ColumnSortOrder.Ascending;

0
您可以在 GridView.EndSorting 事件上添加事件处理程序,并在该处理程序中检查是否有任何列具有 SortIndex >= 0。 如果没有,则可以设置自己的排序。

1
它不起作用:GridView.EndSorting在“清除排序”时未被触发 :( - Olivier de Rivoyre

0
根据Devexpress支持中心的回答如何以编程方式对GridView多列进行排序?,可以使用以下代码来实现此目的:
<your GridView>.SortInfo.AddRange(new DevExpress.XtraGrid.Columns.GridColumnSortInfo[] {  
       new DevExpress.XtraGrid.Columns.GridColumnSortInfo(<your first GridColumn>, DevExpress.Data.ColumnSortOrder.Ascending),  
       new DevExpress.XtraGrid.Columns.GridColumnSortInfo(<your second GridColumn>, DevExpress.Data.ColumnSortOrder.Ascending)});  

更多详细信息可以在代码中的排序找到。

-3

GridControl.SortBy(DateTimeStampColumn, ColumnSortOrder.Descending);

可以翻译为:按时间戳列降序排列GridControl。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接