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

Ext JS / Sencha Discussion :

Ajouter une colonne dans un gridPanel


Sujet :

Ext JS / Sencha

  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut Ajouter une colonne dans un gridPanel
    Bonjour, je cherche à ajouter une colonne à mon gridPanel lors de l'exécution d'un requête ajax:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    des_combo.on('select', function(){
    		descriptor= des_combo.getValue();
    		Ext.Ajax.request({
    			url : '/ogrim/jsp/descriptor_request.jsp' , 
    			method: 'GET',
    			params: {descriptor:descriptor},
    			success: function ( result, request ) { 
    			xmlrep= result.responseXML;
    			st_med_co.loadData(xmlrep);
    J'ai fouillé l'API d'ExtJS et je n'arrive pas à trouver une methode pour ajouter une colonne.
    Avez vous une idée?
    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Bonjour,

    Qu'est-ce que tu veux faire exactement ? Dans la colonne que tu veux rajouter, il est censé y avoir quoi comme données ?

    Sinon, deux pistes de recherche. Premièrement, pour tout ce qui est colonne, c'est dans le columnModel qui va falloir faire quelque chose. Deuxièmement, serait-il possible de créer ta colonne dès le début, mais de ne la rendre visible (ou éventuellement d'en changer certains paramètres) que lorsque tu en as besoin ?

    Bonne chance.

    Mako

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    bonjour,

    je ne crois pas que tu ai besoin de faire un appel ajax...
    Peut etre que tu peut modifier ton colmodel avec les elements du client ...
    et faire un appel de rechargement de ton store ...

    a mediter ...

  4. #4
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut
    En fait je vais tous vous expliqué:
    j'ai un grid panel avec des donnée de départ (store1) jusque la tous va bien.
    j'ai ensuite un combobox avec différentes valeurs (ex: taille, poids, couleur...)
    Quand l'utilisateur sélectionne une valeur de ce combobox l'application envois un requête ajax qui retourne des données relatives à l'élément sélectionné.

    Il faut ensuite que j'ajoute les colonnes correspondant à ces données au grid panel et que j'ajoute les données complémentaire au store1
    donc
    -comment modifier le columnModel pour ajouter des collones à celle déja existant (il ne sagit pas de reconfigurer l'ensemble du grid)?

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Comme ça, à froid, je dirais qu'il n'ait pas possible de rajouter dynamiquement des colonnes à un columnModel. Par contre, ce que tu peux faire peut-être, c'est créé un nouveau columnModel en récupérant les données de ton ancien columnModel, et en ajoutant celles de ta requête. Puis, il ne reste plus qu'à faire le changement pour la grille, et à forcer le ré-affichage. C'est pas très gracieux, mais je vois pas quoi faire d'autres.

    Mako

  6. #6
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut
    Je viens de trouver ça :

    setConfig( Array config, Boolean initial ) : void
    Reconfigures this column model according to the passed Array of column definition objects. For a description of the i...

    sur l'API d'ExtJS, à priori la on peut conserver ou écraser la config initial avec true ou false , on peut donc penser à ajouter des colonnes en conservant les colonnes initiales?

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Effectivement, vu l'API, tu mets les données de ta colonne en paramètre, tu lui dis de conserver l'ancienne version, et cela devrait te rajouter une colonne au final. A tester tout de même avant de crier victoire...

    J'étais totalement passé à côté, au temps pour moi.

    Mako

  8. #8
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut
    Effectiement ce n'est pas encore gagner, comment peut on définir ce 'config array' j'ai essayé pas mal de chose et toujour la même erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.config[a] is undefined
    une idée ?

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Qu'est-ce que tu as mis pour le moment dans ton config ? Peut-être faut-il le formater "en dur" comme un tableau, en écrivant bien [[...],[...],...], ce qui n'est peut-être pas le cas de ce que tu récupères de ton appel AJAX.

    (il y a beaucoup de peut-être, mais je navigue à vue là).

    Mako

  10. #10
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut
    j'ai essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    gridPanel1.colModel.setConfig([
     		          {
        				  header: "% moyen spirale horaire",
        				  width:150,
        				  sortable: true,
        				  dataIndex: "AVG_SPIRALE_HORAIRE"},
        				  {
        					  header: "% moyen spirale anti horaire",
        					  width:150,
        					  sortable: true,
        					  dataIndex: "AVG_SPIRALE_ANTI_HORAIRE"}
        									  ],true)
    la même en définissant mes colonnes dans une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gridPanel1.colModel.setConfig(new_col,true)
    avec les paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    gridPanel1.colModel.setConfig(columns:[
     		          {
        				  header: "% moyen spirale horaire",
        				  width:150,
        				  sortable: true,
        				  dataIndex: "AVG_SPIRALE_HORAIRE"},
        				  {
        					  header: "% moyen spirale anti horaire",
        					  width:150,
        					  sortable: true,
        					  dataIndex: "AVG_SPIRALE_ANTI_HORAIRE"}
        									  ],true)
    je ne vois pas quoi mettre, vraiment bizarre ce truc...

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    avec le code de ton dernier message, as tu toujours une erreur ... ?

  12. #12
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut
    oui toujour l'erreur en revanche si j'essaye:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cl_st=cl_med_st.config();
    			gridPanel1.colModel.setConfig(cl_st,true)
    pas d'erreur mais rien ne ce passe

    SOLUTION TROUVEE!:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var curColConfig = cl_med_st.config;
     
    			curColConfig.push({
    				header: 'sometext',
    				width: 100,
    				dataIndex: 'somefield'
    			});
     
    			cl_med_st.setConfig(curColConfig);
    ça viens d'un problème similaire sur le forum d'ext js, je l'ai essayé une première fois sans succès, là je retente la même (un copier collé! comme pour la première fois) et tada! ça marche!

    c'est la magie du Javascript!

    merci pour ton aide mako!

  13. #13
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut
    Bon ça fonctionne moyen tous ça, c'est même un peu me....dique!

    si j'utilise l'exemple au dessus j'ajoute une colonne à mon grid (mais je doit mettre ma colonne en dur dans mon évenement).

    Si j'utilise la configuration d'un autre columnModel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //	var ColConfig = colModel1.config;
    			var changeConfig=colModel2.config;
    			gridPanel1.getColumnModel().setConfig(changeConfig );
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //	var ColConfig = colModel1.config;
    			var changeConfig=colModel2.config;
    			gridPanel1.getColumnModel().setConfig(changeConfig, false );
    ça marche mais ça écrase en même temps le reste de mon grid.

    Si je met un 'true' pour conserver la configuration initial sa plante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //	var ColConfig = colModel1.config;
    			var changeConfig=colModel2.config;
    			gridPanel1.getColumnModel().setConfig(changeConfig, true );

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    k est ce que tu veut dire par ecraser le reste de ta grid ... ?

    mettez un exemple, une image ... pour comprendre !

  15. #15
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut
    par exemple j'ai mes colonne a,b et c, en ajoutant la colonne d en dur dans l'event (comme le premier exemple 3 post au dessus) j'obtiens a,b, c et d.

    Par contre en utilisant la configuration d'un autre columnModel (columnModel.config) j'obtient uniquement d (mes colonne initiale ont été supprimées).

    Dernière chose, la methode columnModel.setConfig() ne supporte pas les [], en clair si vous utilisé un ensemble de colone de ce type [{colonne1 }, {colonne2}, {colonne3}...] vous obtenez une seul et unique colonne sans nom. il faut donc ajouter les colonnes une à une .

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/06/2010, 14h30
  2. Ajouter une colonne dans DataGrid ou MSHFlexGrid
    Par poil dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/07/2008, 14h03
  3. Réponses: 2
    Dernier message: 03/06/2008, 12h00
  4. Réponses: 7
    Dernier message: 05/05/2008, 13h39

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