2011-11-18 18 views
16

Ho una cella Gwt. Facendo clic sulle intestazioni si ordinano correttamente le colonne. Ma a pagina caricare le colonne non sono ordinate per impostazione predefinita. Voglio rendere la colonna più a destra da ordinare quando la pagina viene caricata.Gwt celltable invoca l'ordinamento su una colonna

risposta

12

È possibile utilizzare il getColumnSortList() e spingere la colonna che si desidera ordinare, come ad esempio:

dataGrid.getColumnSortList().push(columnToSortBy); 

La tabella verranno ordinati in base alla colonna data in ordine crescente.

Chiamando questo metodo due volte, si attiva un controllo per verificare se la colonna specificata è già stata inserita nell'elenco e in tal caso verrà ordinata in ordine decrescente, in modo da ottenere la tabella ordinata in base alla colonna in ordine decrescente.

dataGrid.getColumnSortList().push(columnToSortBy); 
dataGrid.getColumnSortList().push(columnToSortBy); 

Dietro la scena, la colonna viene spinto a un elenco interno nella tabella chiamata ColumnSortList posizione 0. lo stesso elenco viene aggiornato ogni colonna click.

Assicurarsi di chiamare questo metodo dopo aver inizializzato la colonna.

+4

Sto chiamando push() due volte di seguito come mostrato ma, sebbene la freccia lo mostri come ordinato due volte, i dati reali non lo sono. Non riesco a pensare perché questo sta accadendo. – slugmandrew

+0

stesso qui, non so perché –

+2

ho avuto questo problema e ho appena postato la soluzione come risposta alternativa. –

6

Suggerirei di recuperare i dati che verranno visualizzati già ordinati. Se questo è il caso allora sufficiente impostare l'icona di tipo corretto (crescente o decrescente):

/** 
* Displays the appropriate sorted icon in the header of the column for the given index. 
* 
* @param columnIndex 
*   of the column to mark as sorted 
* @param ascending 
*   <code>true</code> for ascending icon, <code>false</code> for descending icon 
*/ 
public void setSortedColumn(int columnIndex, boolean ascending) { 
     Column<T, ?> column = table.getColumn(columnIndex); 
     if (column != null && column.isSortable()) { 
      ColumnSortInfo info = table.getColumnSortList().push(column); 
      if (info.isAscending() != ascending) { 
       table.getColumnSortList().push(column); 
      } 
     } 
} 

Se i dati non possono essere ordinati prima di recuperare è possibile ordinare la lista allo stesso modo lo si fa quando un l'utente fa clic sull'intestazione (onColumnSort(ColumnSortEvent event) con un Comparator) prima di visualizzarlo.

+0

Il tuo codice è stato di grande aiuto. Grazie. – slugmandrew

+0

Ciò è stato utile per garantire che l'ordinamento predefinito non si spostasse tra l'ascendente e la discesa quando si utilizza la soluzione di Jeff Allen. –

24

Per chiarire un paio di risposte esistenti ... Un elenco cellTable s' ordinamento (come accedere alla funzione getColumnSortList()) determina solo come lo stato di intestazione della tabella, ma realtà non ordinare i dati.

Come suggerito da @ z00bs, potrebbe essere opportuno ordinare i dati esternamente, se possibile. Se sai che i dati saranno preordinati, dovresti utilizzare le funzioni getColumnSortList().clear() e getColumnSortList().push() per comunicare agli utenti come vengono ordinati i dati.

Se, tuttavia, si desidera che CellTable ordini effettivamente i dati, è necessario attivare un evento per forzare il CellTable a ordinare effettivamente i dati del componente sul lato client. Per fare questo, è possibile utilizzare il metodo dello stato ColumnSortEvent.fire(), come ad esempio:

ColumnSortEvent.fire(myTable, myTable.getColumnSortList()); 

Ciò attiverà un evento che gestisce l'ordinamento dei dati in base allo stato corrente della testata. Quindi è possibile impostare innanzitutto lo stato di ordinamento iniziale desiderato dell'intestazione, quindi eseguire questa riga per rendere effettivamente l'ordine dei dati riflettere lo stato di ordinamento attuale rappresentato nell'intestazione.

+1

Ho usato questa risposta per aiutare a riordinare la colonna dopo aver applicato determinati filtri sulle colonne. Grazie! – Devesh

+0

Oooooooooooooooooooooooh Ho pensato che stavo impazzendo, grazie :) – Manu