2013-05-03 13 views
8

Esiste un modo per controllare l'ordine del raggruppamento in una griglia dell'interfaccia utente Kendo. C'è un gruppo che vorrei andare prima di tutti gli altri gruppi, ma sembra che la griglia di Kendo UI generi i gruppi in ordine alfabetico. So che aggiungere uno spazio al nome del gruppo funziona ma sembra molto logico.Controllo dell'ordine di gruppo in una griglia dell'interfaccia utente Kendo

Grazie Leo

+0

Grazie per il suggerimento sull'aggiunta di uno spazio davanti al nome (dal back-end) - lo spazio viene effettivamente rimosso quando viene visualizzato nell'interfaccia utente –

risposta

5

Attualmente non esiste un modo per ordinare un raggruppamento su qualcosa di diverso dal campo del gruppo. Avere un modo per ordinare gruppi come Telerik nelle loro griglie non Kendo è la mia più grande richiesta di funzionalità per loro adesso. Quindi per ora siamo bloccati usando gli hack.

Una modifica che funziona per me consiste nel combinare il campo di ordinamento e il campo di visualizzazione in una nuova colonna di stringhe che nasconde la parte del campo di ordinamento all'interno di un'estensione nascosta. Questo viene fatto sul lato sorgente dei dati (per me, in SQL). La nuova colonna viene quindi ordinata come stringa anche se il campo di ordinamento era un numero, quindi in alcuni casi è necessario eseguire il rilievo appropriato.

Per esempio, se il mio dati era:

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

allora posso gruppo dal campo RankName al posto del campo Nome. Visualizzerà il campo Nome nell'intestazione del gruppo ma sarà ordinato per il campo Classifica. In questo caso, Bob apparirà come primo gruppo anche se Alice è stata la prima in ordine alfabetico. Funziona in modo simile allo spazio che hai menzionato.

-2

Utilizza colonne per specificare l'ordine delle colonne, una volta che avete i vostri dati come

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

ordinamento personalizzato direzione quando il raggruppamento è non supportati dal Grid - i gruppi sono ordinato nello stesso modo in cui la colonna è ordinata (quando si utilizza l'ordinamento client) quando non c'è il raggruppamento. La direzione di ordinamento è uguale all'ordinamento predefinito in JavaScript.

0

È possibile aggiungere una query dopo aver definito l'origine dati e questo sembra funzionare

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

Dove correlato è il nome del datasource

2

raggruppamento di Kendo ordina tutti gli elementi della matrice da un determinato campo (ad esempio fooBar), quindi itera gli elementi ordinati. In poche parole, con il codice pseudo:

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

Poiché la matrice ordinata è necessario per il raggruppamento, è difficile cambiare l'ordinamento. Ho creato il codice per sovrascrivere il groupBy() funzione interna, che mi permette di ordinare i risultati raggruppati comunque mi piacciono:

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

chiamata overrideKendoGroupBy() ad un certo punto dopo il caricamento della pagina. Ora implementa solo una funzione dove q.data è una matrice di raggruppamenti e descriptor.dir è "asc" o "desc". q.data[n] ha una matrice items che contiene gli elementi dell'origine dati originale contenuti nel gruppo n.

Nota: questa soluzione funziona solo se non si utilizza il paging. Le pagine vengono scomposte prima dell'applicazione del raggruppamento, quindi tutte le scommesse sono disattivate se i tuoi dati si estendono su più pagine.

0

Prova AddDescending e AddAscending, si vedano gli esempi qui sotto

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

Qui è una soluzione semplice per questo. Non bella, ma abbastanza semplice ...

Basta aggiungere gli spazi davanti al testo per ottenere auspicabile l'ordinamento

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

Nel codice di esempio sopra Gruppo 2 appare davanti Gruppo 1 a causa di uno spazio principale.

Problemi correlati