2010-04-01 13 views
0

Je travaille actuellement sur une application qui utilise un TableViewer à plusieurs endroits pour afficher des données tabulaires formatées. Chaque table doit avoir une fonction d'exportation où tout son contenu est exporté dans un fichier Excel. Afin d'éviter la duplication de code inutile, j'ai pensé qu'il serait bon de s'appuyer sur le framework de visualisation de SWT et de l'utiliser pour obtenir les données tabulaires formatées en utilisant les fournisseurs d'étiquettes enregistrées.Comment puis-je accéder à un TableEditor ou un EditingSupport qui a été attaché à un TableViewer?

Cette approche fonctionne bien avec les tables en lecture seule standard, que ce soit avec des fournisseurs d'étiquettes au niveau de la table ou de la colonne. Cependant, je suis coincé lorsqu'un EditingSupport ou TableEditors ont été définis sur la table.

Dans de tels cas, nous avions souvent des fournisseurs d'étiquettes pour renvoyer des valeurs vides et laisser le TableViewer traiter avec EditingSupport ou TableEditor pour obtenir la représentation des données de cellule. Y at-il un moyen pour moi d'accéder à un TableEditor ou un EditingSupport qui a été attaché à un TableViewer (sans garder une référence séparée auxdits objets) afin que je puisse les utiliser pour récupérer une représentation correcte des données de la cellule? Si ce n'est pas le cas, nous réécrirons probablement nos fournisseurs d'étiquettes afin qu'ils gèrent également les colonnes avec EditingSupport, mais ce serait bien si nous n'avions pas à le faire.

Répondre

1

Il n'y a aucun moyen, que je peux trouver, pour récupérer les objets EditingSupport ou TableEditor d'un TableViewer. Nous stockons les objets EditingSupport séparément pour nos utilisations, mais il semble que ce n'est pas une option pour vous afin que vous puissiez stocker l'objet EditingSupport pour une colonne donnée dans la carte de données de la colonne elle-même. Quelque chose comme:

TableColumn column = new TableColumn(table, SWT.RIGHT); 
EditingSupport editingSupport = new TableEditingSupport(); 
column.setData("editing_support", editingSupport); 

Cela vous donne accès aux objets EditingSupport par une seule référence à la TableViewer et quand vous voulez les récupérer, vous pouvez faire quelque chose comme:

final Table table = tableViewer.getTable(); 
for(TableColumn column : table.getColumns()) 
{ 
    EditingSupport editingSupport = (EditingSupport)column.getData("editing_support"); 
} 

Son assez laid et hacky et, selon votre situation, je suggérerais probablement de réécrire les LabelProviders comme vous l'avez dit, mais si vous choisissez de ne pas le faire, c'est une option. Évidemment, si vous avez accès à la table ou à la liste des colonnes, vous pouvez contourner une partie du gâchis, mais l'idée centrale reste inchangée.

+0

Merci pour votre réponse. Je ne pouvais pas utiliser cette approche en raison de la structure de la base de code existante, donc j'ai corrigé les fournisseurs d'étiquettes quand cela était nécessaire. – christopheml