在.net WinForm上,DevExpress的GridControl/GridView绑定在DataSet上,如何指定默认排序顺序?当没有带有 SortOrder 的可见 GridColumn 时使用的一个。
默认情况下,我在隐藏的 DateTimeStamp GridColumn 上的视图上设置了排序。如果用户单击某列,它当然会被用户覆盖。 用户可以使用列上的菜单或按住 Control 键单击列来“清除排序”。这样做时,行不再排序(或者可能按 PK?),而我希望它们按 DateTimeStamp 排序。
有什么想法吗?也许通过插入代码在用户“清除排序”时收到通知?我可以使用 GridView.PopupMenuShowing 和 GridStringId.MenuColumnClearSorting 来处理用户单击菜单的情况。但它不处理 Control+单击的情况。
有人遇到同样的问题并找到(简单的)解决方案吗?
如果我是你,我会根据所需的列对网格的数据源进行排序。在这种情况下,如果最终用户清除了 gridView 的排序条件,则数据将按照您的 DataSource 指定的顺序显示。
更新 这是应该适合您的代码:
DataView dv = yourDataTable.DefaultView;
dv.Sort = "SomeField";
gridControl.DataSource = dv;
另外,请查看以下 MSDN 文章:
禁用最终用户排序不是最简单的吗?或者我是否误解了您的问题 - 即您是否希望在默认排序之后应用它们的排序?
只需将其放在构造函数的
InitializeComponent();
之后
GridView1.Columns["FieldName"].SortOrder = ColumnSortOrder.Ascending;
您可以在
GridView.EndSorting
事件上添加事件处理程序,并在该处理程序中检查是否有任何列具有 SortIndex >= 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)});
GridControl.SortBy(DateTimeStampColumn, ColumnSortOrder.降序);