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

Bibliothèques & Frameworks Discussion :

Dijit.form.select dans un dojox.Grid.DataGrid


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de moukit233
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    240
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 240
    Par défaut Dijit.form.select dans un dojox.Grid.DataGrid
    Bonjout,
    j'ai une dojox.Grid.DataGrid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
          <table dojoType="dojox.grid.DataGrid"
                               store="store"
                               jsid="grid"
                               id="grid"
                               style="width: 64em; height: 30em;"
                               rowSelector="20px"
                               clientSort="true"
                         >
                            <thead>
                                <tr>
                                     <th field     ="champs2"
                                         formatter ="formateur"
                                         width     ="150px"
                                         cellType  ="dojox.grid.cells.Select"                                  
                                         options  = "..."
                                         values   = "..."
                                         editable = "true"
                                      >
                                        champs2
                                     </th>
                                     <th field    ="champs3"
                                         width    ="150px"
                                         editable ="true"
                                         cellType ="dojox.grid.cells.Select"
                                         options  = "...."
                                         values   = "..."
                                     >
                                        champs3
                                     </th>
     
                                </tr>
                            </thead>
                        </table>
    je veux lier les deux dojox.grid.cells.Select de ma grid
    ou
    remplacer dojox.grid.cells.Select par des Dijit.form.Select
    Y'at-il quelqu'un qui peut m'aider

    merci d'avance

  2. #2
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Salut moukit233,

    C'est délicat de faire cela car ce n'est pas vraiment prévu.
    Déjà pour faire simple je ne passerai pas par une combo dijit mais je conserverais dojox.grid.cells.Select qui est une simple combo html.

    Ensuite techniquement, quand tu passes en édition, il faut faire plusieurs choses:
    1. Obtenir les combos qui servent à éditer ta ligne. Tu peux les obtenir via un dojo.query en cherchant les class de type dojoxGridSelect.
    2. connecter un événement onchange sur la première combo, de façon à pouvoir alimenter la seconde quand la valeur change

    Cela ne doit pas poser de souci majeur, mais comme toute chose non prévue, il y a de l'incertitude !

    ERE

  3. #3
    Membre éclairé Avatar de moukit233
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    240
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 240
    Par défaut
    Salut EMMANUEL.REMY
    merci de votre reponse.

    Citation Envoyé par emmanuel.remy Voir le message
    [*] Obtenir les combos qui servent à éditer ta ligne. Tu peux les obtenir via un dojo.query en cherchant les class de type dojoxGridSelect.

    ERE
    je ne sais pas comment je vais faire pour recuperer les combos .
    j'ai essayé avec ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     function getItemGrid() {
        dojo.query("th.dojoxGridSelect", "idForm")
        .forEach(function (itemClique) {
            dojo.connect(itemClique, "onChange", function (clic) {
     
            });
        });
    }
    mais je suis pas sur .
    Je serai reconnaissant si vous m'avez envoyé des exemples.

  4. #4
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Re,

    J'ai écrit une petite bêtise: il faut effectivement détecter le changement de valeur dans la combo en cours d'édition, mais la seconde combo n'existe pas au même instant... il faudra donc changer ses propres valeurs dans la structure de la cellule. Voici le code (testé) qui permet de récupérer une valeur quand elle change dans la combo source.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <div id="grid" dojoType="dojox.grid.DataGrid" 
      jsId="grid"
      rowSelector="20px"
      store="test_store" structure="layout">
     
    <script type="dojo/connect" event="onStartEdit" args="inCell, inRowIndex">
    		console.info("info:", inCell, inRowIndex);
    		//si la cellule en édition correspond à celle attendue
    		if (inCell.field=="col2") { 
    		//pas très joli, mais vite fait: la combo n'est pas encore créée
    		//donc on décale dans le temps la création de l'événement onchange
    		window.setTimeout( function() {
    			var sel = dojo.query("select.dojoxGridSelect");
    			//on connecte l'événement onchange
    			dojo.connect(sel[0],"onchange",
    				dojo.hitch(sel[0],
    					function() {
    						alert("Traitement pour la valeur " + this.value);
    					}));
    		},2000);
    	}								
    </script>	
    </div>
    A NOTER:
    1. c'est un test de faisabilité, pas un code final
    2. intercepter l'événement onApplyCellEdit est certainement meilleur
    3. finalement l'idéal n'est vraisemblablement de ne pas passer par ces événements un peu trop "magouille" mais de se connecter tout simplement sur l'update des données du store (événement onSet du store) et d'y inscrire le code qui change les données de la seconde combo qu'il faudra afficher


    Mais clairement il y a du temps à consacrer

    ERE

  5. #5
    Membre éclairé Avatar de moukit233
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    240
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 240
    Par défaut
    Re-Salut
    merci de votre reponse.
    J'ai testé cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
      console.info("info:", inCell, inRowIndex);
        //si la cellule en édition correspond à celle attendue
         if (inCell.field == "attribut") { 
            //pas très joli, mais vite fait: la combo n'est pas encore créée
            //donc on décale dans le temps la création de l'événement onchange
            window.setTimeout( function() {
                var sel = dojo.query("select.dojoxGridSelect");
                //on connecte l'événement onchange
                dojo.connect(sel[0],"onChange",
                dojo.hitch(sel[0],
                function() {
                    alert("Traitement pour la valeur " + this.value);
                }));
            },2000);
        }
    mais malheureusement, aucune changement n'est intervenue .
    il me semble que l'evenemnt onChange() n'existe pas pour dojox.grid.cells.Select
    j'ai testé aussi avec l'evenement onApplyCellEdit() sur dojox.grid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    function getItemGrid(inCell, inRowIndex) 
    {   
        console.info("info:", inCell, inRowIndex);
        //si la cellule en édition correspond à celle attendue
         if (inCell.field == "attribut") { 
            //pas très joli, mais vite fait: la combo n'est pas encore créée
            //donc on décale dans le temps la création de l'événement onchange
            window.setTimeout( function() {
                var sel = dojo.query("select.dojoxGridSelect");
                //on connecte l'événement onchange
                dojo.connect(gridGrpe,"onApplyCellEdit",
                dojo.hitch(sel[0],
                function() {
                    alert("Traitement pour la valeur " + this.value);
                }));
            },2000);
        } 
    }
    la seconde solution il m'envoyer la valeur selectionner
    Mais il est valable pour tout les colonnes de la grid (bien sur j'ai d'autre colonnes editable)..
    par contre pour la troisième solution je ne sais pas comment je vais faire...??
    merci de m'aider

  6. #6
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Je vines de retester (dojo 1.2, n'ai que cela sous la main) et la première solution fonctionne.

    Mais attention, ce n'était qu'un essai...

    ERE

  7. #7
    Membre éclairé Avatar de moukit233
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    240
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 240
    Par défaut
    Salut
    j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    function getElementSelectionner(inCell, inRowIndex)
    {
        var elementSelectionner;
        console.info("info:", inCell, inRowIndex);
        //  si la cellule en édition correspond à celle attendue
        if (inCell.field == "col2") { 
            //pas très joli, mais vite fait: la combo n'est pas encore créée
            //donc on décale dans le temps la création de l'événement onchange
            window.setTimeout( function() {
                var sel = dojo.query("select.dojoxGridSelect");
                //on connecte l'événement onchange
                dojo.connect(sel[0],"onchange",
                        dojo.hitch(sel[0],
                                function() {
     
                             elementSelectionner = this.value;
                            alert("Traitement pour la valeur " + this.value);
                                 dojo.xhrPost({
                                      url :"edit-form/id/"+idActif,
                                      handleAs :"text",
                                     form :"idnew",
                                     content : { element : elementSelectionner },
                                     timeout :5000,
                                     load : function(response) {
     
                                    },
                                   error : function(error) {
                                      alert('Probleme requete ajax \n ' + error);
                                  }
                            });
                       }));
            },2000);
            //alert(elementSelectionner);
        }     
    }
    et ds le vue j'appelle ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <div id="grid" dojoType="dojox.grid.DataGrid" 
      jsId="grid"
      rowSelector="20px"
      store="test_store" 
      structure="layout"
      onStartEdit = "getElementSelectionner">
    et il me semble que ça marche mais avec un petite probleme :
    l'evenement n'execute pas du la premiere fois. (si je selectionner un element du liste deroulante pour la 1 ere fois marche pas )
    Mais pour les fois qui suivent, ça marche

    merci de m'aider

  8. #8
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Certainement parce que la grid supprime les noeuds du DOM après leur utilisation. C'est le problème quand on est à la frontière de ce qui est réalisable.

    Il faudrait investiguer et prendre du temps.

    Bon courage pour la suite,

    ERE

Discussions similaires

  1. [Dojo] onRowDblClick de dojox.grid.DataGrid
    Par Zineb1987_UNI dans le forum Bibliothèques & Frameworks
    Réponses: 9
    Dernier message: 19/09/2009, 16h20
  2. [Dojo] Actualisation grid (dojox.grid.DataGrid)
    Par moukit233 dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 07/09/2009, 10h05
  3. [Dojo] Lier deux dojox.grid.cells.Select dans un dojox.grid
    Par moukit233 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 03/09/2009, 15h18
  4. [Dojo] Ajout une liste déroulante dans un Dojox.Grid
    Par moukit233 dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 28/07/2009, 15h54
  5. [Dojo] dojox.grid.DataGrid : prise de tete
    Par linotte91 dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 19/06/2009, 15h22

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