2017-09-14 4 views
0

J'utilise l'extrait ci-dessous pour effacer les données NatTable et effectuer une actualisation complète lors de l'actualisation.NatTable conserve la sélection des lignes sur les données effacées et recharge

natTable.getBodyDataProvider().getList().clear(); 
natTable.getBodyDataProvider().getList().addAll(inputList); 
natTable.refresh(); 

Depuis, les données sont effacées et remis à zéro, je ne parviens pas à régler la sélection de rangée à la ligne précédemment sélectionnée avant l'actualisation.

Cependant, je me sers du RowSelectionModel pour restaurer la sélection avec succès Trier

final RowSelectionModel<T> rowSelectionModel = new RowSelectionModel<T>(bodyLayer.getSelectionLayer(),bodyDataProvider, rowIdAccessor); 
bodyLayer.getSelectionLayer().setSelectionModel(rowSelectionModel); 

Est-il possible de restaurer la sélection de ligne lorsque les données sont effacées et rechargées ??

J'ai vu la question existante sur PreserveModel: How to use Nebula NatTable's PreserveSelectionModel? Mais cela n'a pas répondu à ma question.

Appréciez si quelqu'un pourrait donner plus de pointeurs à ce sujet.

Cordialement, SDS

Répondre

1

IIRC lorsque vous désactivez la liste sous-jacente (et je suppose que vous utilisez GlazedLists donc il y a un événement déclenché lorsque vous le faites), le RowSelectionModel efface les sélections stockées en interne. Ce qui est cohérent, car cela n'a pas de sens de conserver une sélection pour un objet qui a été supprimé.

Vous devez donc implémenter une solution de contournement qui traite de ce fait. Cela peut être par exemple pour implémenter un ISelectionModel personnalisé qui étend le RowSelectionModel et assure la cohérence avec la liste sous-jacente d'une manière différente. Ou vous vous souvenez de la sélection avant d'effacer la liste sous-jacente et d'appliquer à nouveau la sélection. Mais pour ce faire, vous devez enregistrer un PaintListener sur NatTable pour appliquer la sélection en retard, sinon les événements internes effaceront la sélection avec un retard. L'extrait suivant, par exemple, sélectionnera toujours la 5ème rangée dans la région du corps d'un NatTable, qui est la 6ème rangée dans le NatTable en raison de la ligne d'en-tête de la colonne.

natTable.addPaintListener(new PaintListener() { 

    @Override 
    public void paintControl(PaintEvent e) { 
     // use column 1 as column 0 in NatTable is the row header 
     // insert the rows to select that you previously cached 
     natTable.doCommand(
       new SelectRowsCommand(natTable, 1, 5, false, false)); 
    } 
}); 
+0

Merci pour la réponse rapide Dirk. Je cache la sélection Object et sur clear et reload je remets la sélection en utilisant rowSelectionProviderNatTable.setSelection (new StructuredSelection (previousSelectedObj)); Cela ne réinitialise pas la sélection à la table. Puisque NatTable a déjà le Paintlistener, existe-t-il un DefaultPaintListner que je peux utiliser? – SDS

+0

Ne comprends pas la question. Pourquoi ne pouvez-vous pas ajouter un autre PaintListener? –

+0

Je suis nouveau à NatTable et SWT PaintListener. Appréciez si vous pouvez partager un extrait de code pour définir la sélection de ligne. Je vous remercie. – SDS