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

Flex Discussion :

Faire le Cast d'un objet récupéré dans une datagrid


Sujet :

Flex

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut Faire le Cast d'un objet récupéré dans une datagrid
    Bonjour,

    je récupère un objet à l'aide de la méthode getItemAt(index) de la datagrid flex.

    J'ai une classe ContactVO que je vous met simplifiée ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    package
    {
       public dynamic class ContactVO
       {
           public var id:int;
           public var nom:String;
       }
    }
    Dans ma datagrid j'ai deux colonnes une id et une nom (les labelfields et le dataprovider sont bien nommés pareil (id et nom).
    J'essaye de faire var test:ContactVO = madatagrid.getItemAt(3) as contactVO; mais cela ne semble pas fonctionner

    Quelqu'un aurait-il une idée de la façon de procéder pour régler mon problème ?
    Merci d'avance

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    donc si je résume ta dataGrid est alimentée par son dataProvider avec une ArrayCollection qui contient des objets de type ContactVO, on est d'accord?

    ta datagrid affiche bien des éléments n'est ce pas? en mode debug, peux tu vérifier ce que contient le dataProvider de ta dataGrid et voir si il s'agit bien d'objet semblable a un contactVO ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut
    Ma datagrid est alimentée par un arraycollection venant d'un Recordset d'amfphp mais les champs portent les même nom

  4. #4
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    tes objets dans ton dataprovider sont bien semblable à des ContactVO?

    {id:1;nom:"sonNom"}


    bon sinon juste un truc au cas ou, tu as noté ceci dans ton premier post:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var test:ContactVO = madatagrid.getItemAt(3) as contactVO
    ce ne serait pas plutot ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var test:ContactVO = madatagrid.getItemAt(3) as ContactVO

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut
    Oui ils sont bien de ce type j'ai vérifié avec le browser d'amfphp.

    Sinon oui la faute c'est une faute de frappe

  6. #6
    Membre habitué Avatar de greatalain
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2007
    Messages : 124
    Points : 159
    Points
    159
    Par défaut
    Vu que tu utilise les VO et amfphp je présume que tu utilise cairngorm, dans la déclaration de ton VO t'as oublié l'interface ValueObject

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public dynamic class ContactVO implements ValueObject
    ca pourrait être la source du problème

    sinon pour ton cast Prefixe le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ContactVO(madatagrid.getItemAt(3))
    au moins Flex gueulera toute suite si il y a un souci de conversion

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut
    Salut, je viens de trouver la source exacte du problème, et apparemment c'est un problème fréquent.

    Pour te répondre j'utilise PureMVC je le trouve bien plus poussé que cairngorm. Mon problème vient du Binding sur la class Object, je m'explique :

    Je récupère mon ArrayCollection depuis amfphp celui-ci contient plusieurs Object contenant les mêmes propriétés que ma classe ContactVO.
    Je fourni ensuite cette ArrayCollection comme dataprovider à une datagrid (jusque là aucun problème).

    Ensuite je voudrais faire un var contactSelectionne:ContactVO = ContactVO(madatagrid.selectedItem);

    Et là PAFF ça plante avec une belle erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    warning: unable to bind to property 'idContact' on class 'Object' (class is not an IEventDispatcher)
    Alors que les autres champs fonctionnent et que ce champs est bien dans l'objet contenu dans mon arrayCollection...

    Ce problème semble survenir lorsque les Object possèdent beaucoup d'attributs car je fais la même chose avec de plus petits objets et ça marche sans soucis.

    Cela doit être un bug as3, si quelqu'un a une solution à ce problème merci de me donner une astuce pour y remédier car récupérer champs par champs est un peu fastidieux

    Merci

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut
    Je vais tenter de m'expliquer un peu mieux ça vous parlera peut être un peu plus

    Coté PHP avec PDO je retourne quelque chose du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return new RecordSet($monStatement->fetchAll(PDO::FETCH_ASSOC));
    Cela me renvoi un ArrayCollection contenant des Object

    Coté Flex, je fourni ce ArrayCollection en dataprovider d'une datagrid (jusque là pas de soucis ça marche parfaitement)

    Lorsque je fais un truc du genre var contact:ContactVO = maDataGrid.selectedItem as ContactVO j'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    warning: unable to bind to property 'matricule' on class 'Object' (class is not an IEventDispatcher)
    warning: unable to bind to property 'idTypeContact' on class 'Object' (class is not an IEventDispatcher)
    Ces deux champs sont pourtant bien dans ma datagrid étant donné que je les affiches. Je ne comprend pas pourquoi je n'ai pas l'erreur sur tout les champs.

    Voilà j'espère que ça vous éclairera un peu plus

    Merci d'avance

  9. #9
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    problème "interessant" , ton object à vraiment beaucoup de propriété(de quel ordre?)? si j'ai le temps je ferais qq test de mon coté pour voir si je reproduit le problème

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut
    Salut,

    Mon ArrayCollection contient environ 10000 entrée d'objet ContactVO (75 propriétés) ce qui est bizarre c'est que les propriété qui bug sont en plein milieu, ce ne sont ni les première ni les dernière

    J'ai essayé des tas de façon différentes sans succès je commence vraiment à saturer ...

    Merci d'avance à celui qui aura une solution à ce problème.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut
    La méthode que j'utilise côté php est-elle bonne à votre avis au niveau de la récupération dans la base de donnée puis du return ?

    Quelles sont vos méthodes ? c'est la première fois que j'utilise pdo avec amfphp et flex et je ne sais pas si je l'utilise de la bonne façon (surtout au niveau du fetch ) quelqu'un l'utilise t-il d'une autre façon pour retourner des arraycollection vers flex ?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut
    Bon j'ai trouvé une solution provisoire en attendant mieux car en terme de ressource et d'optimisation ce n'est pas génial.

    Coté PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $st = $pdo->query($req);
    while($cont = $st->fetchObject("ContactVO"))
    {
    	$tab[] = $cont;
    }
    return $tab;
    Je retourne un tableau contenant mes objets ContactVO.

    Coté FLEX :
    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
     
                    private function successRes( event:ResultEvent ):void
    		{
    			CursorManager.removeBusyCursor();
    			switch (currentServiceNeeded)
    			{
    				case 'getContacts':
    					lesContacts = new ArrayCollection();
     					var res:Array = event.result as Array;
     					var i:int; 
     					for( i = 0; i < res.length ; i ++)
     					{
     						var recup:ContactVO = res[i];
     						lesContacts.addItem(recup);
     					} 					
    					sendNotification(CONTACTS_RECUP);
    					break;
    			}
    		}
    J'itère sur le tableau reçu et met chaque contactVO dans ma ArrayCollection.

    J'ai une perte de performance énorme étant donné le nombre d'entrée élevé mais pour le moment ça me permet d'avancer.

    Je reste à votre écoute pour toute autre solution, Merci

Discussions similaires

  1. Recuperation des objet ole dans une base SQL
    Par TOPGUN89 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 25/11/2005, 09h14
  2. insertion d'un objet 3D dans une video en temps réel
    Par chabfive dans le forum OpenGL
    Réponses: 5
    Dernier message: 02/11/2005, 13h10
  3. [VB.NET] Objet .Tag dans une ListView
    Par Lois dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/10/2004, 16h35
  4. Transmission d'un objet crée dans une fonction
    Par EvilAngel dans le forum ASP
    Réponses: 2
    Dernier message: 10/05/2004, 20h19
  5. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37

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