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 :

Afficher un objet json complexe dans un datagrid ? [Dojo]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Points : 110
    Points
    110
    Par défaut Afficher un objet json complexe dans un datagrid ?
    C'est encore moi,

    J'ai maintenant un soucis avec dojox.grid.DataGrid.
    Je voudrais le mapper avec une liste d'objets Json. Ces objets Json possède des sous-objets en propriété, et je voudrais afficher une de ces propriétés dans la grille.

    Lorsque j'affiche une propriété "root", ça fonctionne. Mais lorsque je souhaite afficher une propritété d'un sous-objet, ça m'affiche "...". Je ne comprends pas. Y'a-t-il un moyen de remédier au problème ?

    Voici un exemple d'un tableau Json :
    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
    [
        {
            "id": 1,
            "userInfo": {
                "id": 1,
                "group": {
                    "name": "my_group",
                    "id": 1
                },
                "fullName": "Admin ADMIN",
                "isEnable": true,
                "firstname": "Admin",
                "lastname": "ADMIN"
            },
            "password": "my_pass",
            "login": "admin",
        }
    ]
    Voici ma structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    grid = new dojox.grid.DataGrid({
    	store: dataStore = dojo.data.ObjectStore({objectStore: accountsStore}),
    	structure: [
    		{name:"Id", field:"id", width: "50px"},
    		{name:"User", field:"userInfo.fullName", width: "200px"},
    		{name:"Email", field:"userInfo.email", width: "200px"},
    		{name:"Group", field:"userInfo.group.name", width: "200px"},
    		{name:"Status", field:"userInfo.isEnable", width: "200px"},
    		{name:"Login", field:"login", width:"200px"}
    	 ]
    }, "accounts-table");
    Le field 'id' s'affiche correctement, le field 'userInfo.fullName' affiche "..." à la place de la valeur.

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Points : 110
    Points
    110
    Par défaut
    Hellow !

    J'ai trouvé une solution en feuilletant la doc pour un tout autre problème : en voulant formater une cellule.
    J'ai alors lu ceci :
    If you set the value of the field to “_item”, then your formatter will be called with the entire item from the store - instead of just one field value
    J'ai donc modifié mon code comme suit et ça fonctionne :
    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
    37
    38
    39
    40
    41
    // Create the grid
    grid = new dojox.grid.DataGrid({
    	store: dataStore = dojo.data.ObjectStore({objectStore: accountsStore}),
    	structure: [
    		{name:"Id", field:"id", width: "50px"},
    		{
    			name:"User", 
    			field:"_item", 
    			width: "350px", 
    			formatter:function(item){
    				return item.userInfo.fullName + 
    					" <a href='" + lib.utils.appBaseUrl + "admin/accounts/view/" + item.id + "'>[view]</a> " +
    					" <a href='" + lib.utils.appBaseUrl + "admin/accounts/edit/" + item.id + "'>[edit]</a>";
    			},
    		},
    		{
    			name:"Email", 
    			field:"_item", 
    			width: "350px",
    			formatter:function(item){
    				return item.userInfo.email;
    			}
    		},
    		{
    			name:"Group", 
    			field:"_item", 
    			width: "200px",
    			formatter:function(item){
    				return item.userInfo.group.name;
    			}
    		},
    		{
    			name:"Status",
    			field:"_item", 
    			width: "60px",
    			formatter:function(item){
    				return item.userInfo.isEnable;
    			}
    		}
    	],
    }, "accounts-table");
    Si vous avez une meilleure solution, je suis preneur. Mais je trouve celle-là plutôt propre et facile à maintenir...

    Enjoy !

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

Discussions similaires

  1. Manipulation d'objets complexes dans un Datagrid
    Par madislak dans le forum Flex
    Réponses: 0
    Dernier message: 17/02/2010, 11h04
  2. Afficher la date en français dans un dataGrid
    Par bilou69 dans le forum Flex
    Réponses: 20
    Dernier message: 14/12/2009, 12h42
  3. [Dojo] Choix des colonnes a afficher avec enregistrement du choix dans une dataGrid
    Par devkaty dans le forum Bibliothèques & Frameworks
    Réponses: 9
    Dernier message: 13/07/2009, 13h34
  4. [ASP.Net] Afficher ou non l'heure dans un datagrid
    Par User.Anonymous dans le forum ASP.NET
    Réponses: 6
    Dernier message: 05/03/2008, 15h26
  5. [WebForms]Afficher telle ou telle image dans un datagrid
    Par Emdis dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 30/05/2005, 18h02

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