2013-05-03 5 views
8

Есть ли способ контролировать порядок группировки в сетке пользовательского интерфейса Kendo. Есть группа, которую я хотел бы пройти перед всеми другими группами, но, похоже, сетка Kendo UI сортирует группы по алфавиту. Я знаю, что добавление пространства в имя группировки работает, но это кажется очень хаки.Управление порядком группы в сетке пользовательского интерфейса Kendo

Благодаря Leo

+0

Спасибо за отзыв о добавлении пространства перед именем (с тыльной стороны) - пространство фактически удаляется, когда оно отображается в пользовательском интерфейсе –

ответ

5

В настоящее время нет способа сортировать группировку над чем-то другим, кроме поля группы. Имея способ сортировать группы, такие как Telerik, в своих сетях, отличных от Kendo, является моим самым большим запросом для них. Таким образом, мы застряли с помощью хаков.

Один хак, который работает для меня, заключается в объединении поля сортировки и поля отображения в новый колонтитул строки, который скрывает часть поля сортировки внутри скрытого диапазона. Это делается на стороне источника данных (для меня, в SQL). Затем новый столбец сортируется как строка, даже если поле сортировки было числом, поэтому в некоторых случаях вам необходимо выполнить соответствующую настройку.

Например, если мои данные были:

[ 
    { 
     'Name': 'Alice', 
     'Rank': 10, 
     'RankName': '<span class="myHiddenClass">10</span>Alice', 
     ... (other fields) 
    }, 
    { 
     'Name': 'Bob', 
     'Rank': 9, 
     'RankName': '<span class="myHiddenClass">09</span>Bob', 
     ... (other fields) 
    }, 
    { 
     'Name': 'Eve', 
     'Rank': 11, 
     'RankName': '<span class="myHiddenClass">11</span>Eve', 
     ... (other fields) 
    } 
    ... (Multiple Alice/Bob/Eve records) 
] 

Тогда я могу группа по полю RankName вместо поля Name. Он отобразит поле Name в заголовке группы, но будет отсортировано по полю Rank. В этом случае Боб появится в качестве первой группы, хотя Алиса была первой в алфавитном порядке. Это работает аналогично пространству, которое вы упомянули.

-2

Используйте столбцы, чтобы указать порядок столбцов, как только у вас есть такие данные, как

columns: [ 
{ 
field: "LastName", 
title: "Last Name" 
}, 
{ 
field: "FirstName", 
title: "First Name" 
} 
] 
0

Пользовательские направление сортировки, когда группировка не поддерживается сеткой - группы сортируются так же, как сортировка столбца (при использовании сортировки клиента), когда нет группировки. Направление сортировки аналогично сортировке по умолчанию в JavaScript.

0

Вы можете добавить запрос после того, как вы определили источник данных, и это, кажется, работает

related.query({ 
     sort: { field: "Sort", dir: "asc"}, 
     group: { field: "CategoryName" }, 
     pageSize: 50 
    }); 

Где родственное имя источника данных

2

группировки кендо в перебирает все элементы в массиве по заданному (например, fooBar), а затем повторяет отсортированные элементы. В двух словах, с псевдо-код:

if (element[i].fooBar!= element[i-1].fooBar) { 
    StartNewGroup(element[i]); 
} else { 
    AddToLastGroup(element[i]); 
} 

Поскольку отсортированный массив требуется сделать группировку, это сложно изменить сортировку. Я создал код, чтобы переопределить внутреннюю groupBy() функцию, которая позволяет мне сортировать сгруппированных результаты, однако я люблю:

function overrideKendoGroupBy() { 
    var origFunc = kendo.data.Query.prototype.groupBy; 
    kendo.data.Query.prototype.groupBy = function (descriptor) { 
     var q = origFunc.call(this, descriptor); 

     var data = SortYourData(q.data, descriptor.dir); 

     return new kendo.data.Query(data); 
    }; 
} 

вызов overrideKendoGroupBy() в какой-то момент после загрузки страницы. Теперь просто выполните функцию SortYourData(), где q.data - это массив групп, а descriptor.dir - "asc" или "desc". q.data[n] имеет массив items, который содержит элементы из исходного источника данных, которые содержатся в группе n.

Примечание: Это решение работает только в том случае, если вы не используете пейджинг. Страницы разбиты до применения группировки, поэтому все ставки отключены, если ваши данные занимают несколько страниц.

0

Попробуйте AddDescending и AddAscending, смотрите примеры ниже

@(Html.Kendo().Chart<T>() 
[... other code ...] 
.DataSource(ds => ds 
    .Read(read => read.Action("action", "controller")) 
    .Group(g => g.AddDescending(model=> model.property)) // <-- subtle difference here! 
) 
[... other code ...] 
) 

http://www.telerik.com/forums/stacked-chart-legend-order

0

Вот простой обходной путь для этого. Не очень, но достаточно просто ...

Просто добавьте пробелы перед текстом, чтобы добиться желаемого сортировки

[{ 
     'Value': 1, 
     'Description': 'Description 1', 
     'Grouping': 'Group 1' 
    }, 
    { 
     'Value': 2, 
     'Description': 'Description 2', 
     'Grouping': ' Group 2' 
    }, 
    { 
     'Value': 3, 
     'Description': 'Description 3', 
     'Grouping': 'Group 3' 
    }] 

В примере кода выше Группа 2 появляется перед Группа 1 из-за ведущего пространства.

Смежные вопросы