IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

[RCP/SWT/JFACE] Update des données d'un tableViewer


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Par défaut [RCP/SWT/JFACE] Update des données d'un tableViewer
    Bonjour à tous,

    Je reviens vers vous afin de bénéficier de vos précieux conseils sur une problématique à la quelle jsuis confronté en ce moment.

    Dans une vue de l'application que je suis en train de concevoir, je dispose d'un tableViewer dont je voudrais mettre à jour les données. Pour être plus précis, l'application dispose également d'une vue navigation contenant un treeViewer. Quand je clique sur un noeud de l'arbre, je recupère certaines informations (requête, dataSource, ...). Ces informations sont ensuite utilisées pour créer un ModelProvider(objet qui recupère les infos précédentes, excute la requête et fournie mes lignes d'objet metier). Ce sont ces lignes qui sont utilisées par le contentProvider afin de remplir ma table.

    Les données recupérées étant succeptibles de changer en cour d'éxécution, j'ai ajouté un bouton me permettant de "rafraichir" la vue. En principe, cette action devrait juste consister à recuperer mes infos (celles obtenues lors du click et associées à la vue en cour) et à instancier un nouvel ModelProvider que j'utiliserais ensuite pour mettre à jour les données de mon viewer.

    Cependant, lorsque je fais cela, j'obtiens de nouvelles colonnes qui viennent se placer à la suite de celles qui étaient déjà là. En d'autres termes, l'ancien viewer est tjrs présent. Malgré le fait que j'ai disposé les colonnes de l'ancien viewer, rien y fait. J'ai l'impression que le pb vient de la manière dont j'agence mes données.

    En restant à votre disposition pr tout complément d'info(notement des sources), je vous remercie d'avance.

    merci

  2. #2
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Par défaut
    J'ajoute en pj, les codes sources de mes deux principales classes concernées :

    - NavigationView : permet de gérer la vue de navigation. c'est entre autre la dedans qu'on recupère les informations(myQuery, myDataSource) liées au noeud selectionné, et qu'on les "envoie" à la vue de resultat(ResultView).

    - ResultView : contient le tableViewer rempli des données corresspondants au noeud selectionné. La méthode refreshColumns(TableViewer viewer, final ModelProvider modelProvider) permet de "rafraichir" le contenu du viewer. Elle est notement utilisée par la navigationView dans en cas de première selection d'un noeud. Elle prends en entrée le viewer courant, et le modelProvider créée à partir des infos sur le noeud selectioné (requête et au dataSource).

    Dans l'action dans la quelle je voudrais mettre à jour ma vue(le contenu de son tableViewer), je fais appel à cette denière méthode avec en paramètre un nouvel modelProvider instancié(qui fera donc une nouvelle requête en base et donc me fournira de nvelles données), et le viewer courant.

    Le problème est que je lui passe un viewer déjà "garni", que je n'arrive pas à disposer.

    Pour faire simple, je voudrais pour ce "refresh", remplacer le tableViewer existant par un nouveau dont les données(colonnes et contenu) sera celui obtenu à l'aide du nouvel modelProvider.

    En espérant que vous avez suivi, je m'em remet à vos conseils avisés.

    Merci
    C'est cette dernière mé
    Fichiers attachés Fichiers attachés

  3. #3
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Salut papaetoo,

    Tu te compliques la vie... Surtout avec les Viewers JFace. Tu n'as pas besoin de supprimer ton Viewer et de le recréer. Il suffit de mettre à jour l'input du TableViewer et faire un refresh... A moins que tes colonnes aient changé (mais je vois pas pourquoi elles changeraient étant donné que tu veux juste rafraichir une Vue avec les données de ta table). Donc, normalement, tu as les mêmes colonnes et seul le contenu change.
    En gros, ce qu'il te faut faire :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myTable.setInput(new ModelProvider(...));
    myTable.refresh();
    Et c'est tout. Pas la peine de se lancer dans la suppression du Viewer et de ses colonnes pour les remplacer ^^

    Voilà, à+
    Gueritarish

  4. #4
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Par défaut
    Merci Gueritarish pour ta réponse,

    Effectivement, j'aurais juste à mettre à jour les données que je ferais comme tu le dis. Mais dans mon cas, tout est succeptible de changer. J'exécute en effet la pluspart du temps des procédures stockées et je ne sais pas à l'avance ce que je dois avoir comme résultat. D'ou le besoin de tout "disposer" et recréer à nouveau.

    Pour l'instant, j'ai une méthode dispose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void dispose(){
    	Table table = viewer.getTable(); 		
    	// La première colonne n'est pas disposée
    	if (table.getColumnCount() > 0){
    		for(int i=table.getColumnCount()-1; i >= 0; i--) {
    			table.getColumn(i).dispose();				
    		}
    	}
    // ceci fai également la même chose à la seule différence que 
    // c'est la derniere colonne qui n'est pas disposée
    // for (final TableColumn column : table.getColumns()) {
    //		column.dispose();
    //	}		
    }
    .

    De plus, qd j'appele cette méthode et que je fais mon "refreshColumns", et bien, j'ai plusieurs erreurs (An error has occurred. See error log for more details.
    java.lang.NullPointerException
    ) qui sont générées.

    Avez vous des idées de solutions?

    EDIT : le nombre d'erreurs générées est égal au nombre de lignes qui était présentes dans la tableViewer dont jai disposé les colonnes.

    EIT : lorsque la vue que je veux raffraichir ne contient pas de données, je n'ai aucune erreur(0 ligne => 0 erreur). J'ai l'impression que le pb vient du fait que dans ma méthode refreshColumns, je "sette" à nouveau le ContentProvider, le LabelProvider, et l'input. Sachant que la seule chose que j'ai faite ce n'est que disposer mes colonnes, est ce que les erreurs que j'obtiens viennent de ces (re) "settages" là? Dans ce cas, auriez vous une solution?

    Merci

  5. #5
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Par défaut
    J'arrive maintenant à "disposer" toutes mes colonnes. Pour cela, j'ai rajouté la ligne : à la fin de ma méthode disposeColumns() (Est ce que cela est d'ailleurs propre?).

    Par contre, j'ai toujours mes erreurs lorsque j'appelle ma méthode refreshColumns(). Pour mémoire, j'obtiens autant d'érreurs que de lignes présentes dans le tableViewer dont j'ai disposé les colonnes. Une capture d'écran de cette erreur est présente en pièce jointes.

    De plus J'ai l'impression que le problème vient du fait que je ne "dispose" que les colonnes de la table du viewer. Les données présentes (et obtenues grâce au setInput()) n'ayant elles pas été suprimées, cela poserait problème quand je refais à nouveau un "setInput()".

    Qu'en pensez vous?

    merci
    Images attachées Images attachées  

  6. #6
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Par défaut
    Slt à tous,

    Je viens de me rendre compte que le fait de faire ensuite table.removeAll(); ne "disposais" completement mes colonnes. Car quand j'affiche ma vue apres avoir appellé ma méthode refreshColumns, il y'a toujous une colonne remplie d'informations(sans le header par contre). Cette colonne est en fait la première colonne du tableViewer dont je viens de disposer les colonnes.

    Je suis completement perdu, même apres avoir débuggué, jne trouve pas d'ou vient le souci.

    Merci infinémént de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Rcp/Swt/Jface] "Disposer les colonnes d'un tableViewer"
    Par papaetoo dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 05/08/2009, 18h00
  2. Réponses: 2
    Dernier message: 22/09/2008, 18h21
  3. Réponses: 6
    Dernier message: 10/09/2008, 14h29
  4. updater des données dans mon fichier excel
    Par gantec dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/02/2007, 16h01
  5. update des données
    Par LesLemmings dans le forum Visual C++
    Réponses: 2
    Dernier message: 30/11/2006, 09h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo