2013-05-03 10 views
8

Czy istnieje sposób kontrolowania kolejności grupowania w sieci Kendo UI. Jest grupa, którą chciałbym przejść przed wszystkimi innymi grupami, ale wygląda na to, że siatka Kendo UI sortuje grupy alfabetycznie. Wiem, że dodanie spacji do nazwy grupy działa, ale to wydaje się bardzo hackowe.Sterowanie zamówieniem grupy w siatce Kendo UI

Dzięki Leo

+0

Dzięki za podpowiedź na temat dodawania spacji przed nazwą (z tyłu) - przestrzeń zostanie faktycznie usunięta, gdy zostanie wyrenderowana w interfejsie użytkownika –

Odpowiedz

5

Obecnie nie ma sposobu sortowania grupowania na coś innego niż pole grupy. Posiadanie sposobu sortowania grup takich jak Telerik w ich sieciach innych niż Kendo to moja największa prośba dotycząca funkcji dla nich w tej chwili. Więc utknęliśmy na razie przy użyciu hacków.

Jeden z hacków, który działa dla mnie, to połączenie pola sortowania i pola wyświetlania w nową kolumnę z ciągiem znaków, która ukrywa część pola sortującego wewnątrz ukrytego zakresu. Odbywa się to po stronie źródła danych (dla mnie, w SQL). Nowa kolumna jest następnie sortowana jako ciąg znaków, nawet jeśli pole sortowania zawiera cyfrę, więc w niektórych przypadkach trzeba odpowiednio wstawić.

Na przykład, jeśli dane były:

[ 
    { 
     '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) 
] 

Potem można grupować według pola RankName zamiast pola Nazwa. Wyświetli pole Nazwa w nagłówku grupy, ale zostanie posortowane według pola Ranga. W tym przypadku Bob pojawi się jako pierwsza grupa, mimo że Alicja była alfabetycznie. Działa to podobnie do wymienianej przestrzeni kosmicznej.

-2

Użyj kolumny, aby określić kolejność kolumn skoro masz swoje dane, takie jak

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

Niestandardowe sortowanie kierunek podczas grupowania jest nie obsługiwana przez sieć - grupy są sortowane w ten sam sposób, w jaki sortowana jest kolumna (w przypadku sortowania klienta), gdy nie ma grupowania. Kierunek sortowania jest taki sam, jak domyślny sort w JavaScript.

0

Możesz dodać kwerendy po zdefiniowaniu źródła danych, a to wydaje się działać

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

Gdzie związana jest nazwa źródła danych

2

zgrupowanie Kendo w sortuje wszystkie elementy w tablicy przez dany pole (na przykład fooBar), a następnie iteruje posortowane elementy. W skrócie, z pseudo kod:

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

Ponieważ posortowanej tablicy jest zobowiązany do grupy, to jest trudne do zmiany sortowania. Stworzyłem kod Unieważnia wewnętrzny groupBy() funkcję, która pozwala mi posortować wyniki pogrupowane jednak lubię:

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); 
    }; 
} 

połączenia overrideKendoGroupBy() w pewnym momencie po swojej stronie ładunku. Teraz wystarczy zaimplementować funkcję SortYourData(), gdzie q.data jest tablicą zgrupowań, a descriptor.dir jest "asc" lub "desc". q.data[n] ma tablicę items zawierającą elementy z oryginalnego źródła danych, które są zawarte w grupie o numerze n.

Uwaga: to rozwiązanie działa tylko wtedy, gdy nie używasz stronicowania. Strony są podzielone przed zastosowaniem grupowania, więc wszystkie zakłady są wyłączone, jeśli dane obejmują wiele stron.

0

Spróbuj AddDescending i AddAscending, patrz przykłady poniżej

@(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

Oto proste obejście tego. Nie dość, ale wystarczająco prosty ...

Wystarczy dodać spacje przed tekstem, aby osiągnąć pożądane sortowania

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

W przykładowym kodzie powyżej Grupa 2 pojawia się przed Grupa 1 ze względu na wiodącą przestrzeń.

Powiązane problemy