2013-10-08 3 views
0

Pour afficher certaines données, j'utilise la vue de table qui prend en charge la radiomessagerie - CellTable.CellTable: réorganisation dynamique des lignes

pour baliser l'interface utilisateur que j'utilise UIBinder:

... 
<g:HTMLPanel> 
<c:CellTable pageSize='100' ui:field='myTable'/> 
<c:SimplePager ui:field='myPager' location='CENTER'/> 
</g:HTMLPanel> 
... 

Dans le widget, j'ai créé une table et Pagination:

@UiField(provided=true) CellTable<myDTO> myTable; 

... 

SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class); 
myPager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true); 
myTable = new CellTable<myDTO>(); 
... 

Puis-je installer un modèle de sélection -

final NoSelectionModel<myDTO> selectionModel = new NoSelectionModel<myDTO>(); 
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 
    public void onSelectionChange(SelectionChangeEvent event) { 
     clickedObject = selectionModel.getLastSelectedObject(); 
    } 
});  

myTable.setPageSize(50); 
myTable.setSelectionModel(selectionModel); 

Et ajouté quelques colonnes:

Column<myDTO, String> column1 = new Column<myDTO, String>(new TextCell()) { 
    @Override 
    public String getValue(myDTO data) { 
     return data.getSomeData1(); 
    } 
}; 

Column<myDTO, String> column2 = new Column<myDTO, String>(new TextCell()) { 
    @Override 
    public String getValue(myDTO data) { 
     return data.getSomeData2(); 
    } 
}; 
... 
Column<myDTO, String> columnN = new Column<myDTO, String>(new TextCell()) { 
    @Override 
    public String getValue(myDTO data) { 
     return data.getSomeDataN(); 
    } 
};  

myTable.addColumn(column1, "name of column1"); 
myTable.addColumn(column2, "name of column2"); 
... 
myTable.addColumn(columnN, "name of columnN"); 

Ensuite, je crée AsyncDataProvider:

AsyncDataProvider<myDTO> provider = new AsyncDataProvider<myDTO>() { 
    @Override 
    // is called when the table requests a new range of data 
    protected void onRangeChanged(HasData<myDTO> display) { 

     final int start = display.getVisibleRange().getStart(); 
     final int lenght = display.getVisibleRange().getLength(); 

     myService.findAll(new AsyncCallback<List<myDTO>>() { 
      public void onFailure(Throwable caught) { 
      // exception handling here 
      } 

      public void onSuccess(List<myDTO> data) { 
      updateRowCount(data.size(), true); 
      updateRowData(0, data); 
      } 
     }); 
    } 
}; 

provider.addDataDisplay(myTable); 

Lorsque j'ajoute de nouvelles lignes ont-ils ajouté à la fin de la liste.

Je voudrais trier automatiquement les lignes lors de leur ajout - les valeurs ascendantes de certaines colonnes (ou décroissant - n'est pas important dans ce cas).

Comment puis-je l'implémenter?

Merci à tous.

Répondre

2

Créer un gestionnaire de tri juste après la création de votre fournisseur:

ListHandler<myDTO> sortHandler = new ListHandler<myDTO>(provider.getList()); 
myTable.addColumnSortHandler(sortHandler); 

Ensuite, pour chaque colonne que vous voulez trier, définir un comparateur et ajouter la colonne à la liste de tri, par exemple:

sortHandler.setComparator(column1, new Comparator<myDTO>() { 
    public int compare(myDTO dto1, myDTO dto2) { 
     // This is an example, how you compare them depends on the context 
     return dto1.getSomeData1().compareTo(dto2.getSomeData1()); 
    } 
}); 

myTable.getColumnSortList().push(column1); 

Vous pouvez appeler plusieurs fois la méthode push() pour trier plusieurs colonnes. Vous pouvez également l'appeler deux fois pour que la même colonne inverse son ordre de tri (ascendant/descendant).

+0

Fonctionne très bien. Je vous remercie! –

+0

Une petite note. Votre méthode fonctionne très bien, mais dans mon cas, j'ai décidé de le faire - trier les données sur le côté serveur et obtenir déjà trié des données. 'asc/desc' - en fonction d'un certain paramètre, que je passe à ma méthode de service * GWT RPC *. –

+0

Pourriez-vous s'il vous plaît me dire que je dois appeler push() pour chaque colonne tout en définissant le gestionnaire. – Ashish