Сортировка сетки кендо по нескольким столбцам
У меня есть сетка кендо. Когда страница загружается, по умолчанию я хочу отсортировать сетку по столбцу 1, а затем по столбцу 2 в порядке убывания.
Проблема: сортировка выполняется правильно, однако стрелка сортировки отображается в последнем отсортированном столбце. Таким образом, в случае ниже, когда страница загружается, стрелка сортировки находится на "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))
)
2 ответа
То, как вы в настоящее время добавляете столбцы для сортировки, в основном переопределяет предыдущий столбец и учитывает только последний столбец, который вы пишете (DueDate
в этом случае). Это происходит потому, что ваш .Sort()
написано как одно утверждение
Чтобы ваша сортировка работала правильно, вы должны изменить .Sort()
чтобы:
.Sort(x =>
{
x.Add(y=>y.DownloadDate).Descending());
x.Add(y=>y.DueDate).Descending());
}
В предложенном ответе есть синтаксическая ошибка. Оператор сортировки должен быть:
.Sort(x =>
{
x.Add(y=>y.DownloadDate).Descending();
x.Add(y=>y.DueDate).Descending();
})
Если вы хотите, чтобы пользователи могли по выбору сортировать по нескольким столбцам и / или не сортировать, внесите следующие изменения:
from:.Sortable (x => x.AllowUnsort (false))
to:.Sortable (x => x.SortMode (GridSortMode.MultipleColumn).AllowUnsort (true))