在多列上对剑道网格进行排序

Posted

技术标签:

【中文标题】在多列上对剑道网格进行排序【英文标题】:Sorting kendo grid on multiple columns 【发布时间】:2015-10-04 22:30:00 【问题描述】:

我有一个剑道网格。当页面加载时,默认情况下,我想按 column1 然后按 column2 降序对网格进行排序。

问题: 它按预期排序,但是排序箭头显示在最后一个排序的列上。因此,在以下情况下,当页面加载时,排序箭头位于“DueDate”而不是“DownloadDate”

 @(html.Kendo().Grid<TrackingVM>()
    .Name("Grid")
    .Columns(col =>
    
        col.Bound(p => p.ID).Hidden();
        col.Bound(p => p.Year);
        col.Bound(p => p.State);                        
        col.Bound(p => p.DueDate).Format("0:MM/dd/yyyy");
        col.Bound(p => p.DownloadDate).Format("0:MM/dd/yyyy");            
    )
    .AutoBind(false)
    .Pageable(x => x.PageSizes(UISettings.PageSizes))
    .Sortable(x => x.AllowUnsort(false))
    .Resizable(resizing => resizing.Columns(true))
    .Scrollable(s => s.Height("auto"))
    .DataSource(dataSource => dataSource
        .Ajax()            
        .Sort(x => x.Add(y=>y.DownloadDate).Descending()).Sort(x=>x.Add(y=>y.DueDate).Descending())
        .Read(read => read
            .Action("GetData", "Tracking"))
    .ServerOperation(false))
)

【问题讨论】:

为什么不对数据源本身进行排序,或者在 kendogrid 中排序? 【参考方案1】:

您当前添加列进行排序的方式基本上会覆盖前一列,并且只考虑您编写的最后一列(在本例中为DueDate)。发生这种情况是因为您的 .Sort() 是作为一个单一语句编写的。

为了让您的排序正常工作,您应该将您的 .Sort() 更改为:

.Sort(x =>

    x.Add(y=>y.DownloadDate).Descending();
    x.Add(y=>y.DueDate).Descending();
 

【讨论】:

【参考方案2】:

建议的答案中有语法错误。排序语句应该是:

.Sort(x =>

    x.Add(y=>y.DownloadDate).Descending();
    x.Add(y=>y.DueDate).Descending();
)

【讨论】:

【参考方案3】:

如果您希望用户可以选择按多列排序和/或取消排序,请进行以下更改:

来自: .Sortable(x => x.AllowUnsort(false))

到: .可排序(x=> x .SortMode(GridSortMode.MultipleColumn) .AllowUnsort(true) )

【讨论】:

以上是关于在多列上对剑道网格进行排序的主要内容,如果未能解决你的问题,请参考以下文章

对 WPF 数据网格中的多列进行排序

剑道网格自定义列菜单

剑道网格按可空属性排序

如何根据多列对 flex 数据网格进行排序?

禁用剑道网格

Angular 2 - 剑道 UI 网格。排序实现的问题