在多列上对剑道网格进行排序
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) )
【讨论】:
以上是关于在多列上对剑道网格进行排序的主要内容,如果未能解决你的问题,请参考以下文章