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 :

Amfphp et Spark Datagrid [Flex4]


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 17
    Par défaut Amfphp et Spark Datagrid
    Bonjour,

    Via Flash Builder 4.6 je te tente de récupérer dans un spark datagrid les données du base mysql (amfphp 2.1 étant le connecteur PHP).

    Ci joint le code 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
    			   xmlns:s="library://ns.adobe.com/flex/spark"
    			   xmlns:mx="library://ns.adobe.com/flex/mx"
    			   xmlns:contactservice="services.contactservice.*"
    			   xmlns:valueObjects="valueObjects.*"
    			   minWidth="750" 
    			   			   >
     
    	<fx:Script> 
    		<![CDATA[ 
    			import mx.controls.Alert;
    			import mx.events.FlexEvent;
    			import mx.rpc.events.FaultEvent;
    			import mx.rpc.events.ResultEvent;
    			import vo.ContactVO;
     
    			private function onFaultHandler(event:FaultEvent):void
    			{
    				trace(event.fault.faultDetail);
    			}
     
    			protected function myGrid_creationCompleteHandler(event:FlexEvent):void
    			{
    				myGrid.dataProvider = myRemote.getContacts() ;
     
    			}
     
    		]]> 
    	</fx:Script> 
     
    	<fx:Declarations>
    		<s:RemoteObject id="myRemote" destination="ContactService" source="ContactService"
    						 endpoint="http://localhost/Contacts-debug/Amfphp/" showBusyCursor="true"
    						 fault="onFaultHandler(event)" />
     
    	</fx:Declarations>
     
    		<s:DataGrid id="myGrid" 
    					dataProvider="{ myRemote.getContacts.lastResult }"
    					creationComplete="myGrid_creationCompleteHandler(event)"
    					editable="true" 
    					requestedRowCount="8" >
    			<s:columns> 
    				<s:ArrayList> 
    					<s:GridColumn width="100" dataField="nomaffiche" headerText="Nom à afficher" ></s:GridColumn> 
    					<s:GridColumn width="100" dataField="nom" headerText="Nom" ></s:GridColumn> 
    					<s:GridColumn width="90" dataField="prenom" headerText="Prénom" ></s:GridColumn> 
    					<s:GridColumn width="150" dataField="societe" headerText="Société" ></s:GridColumn> 
    					<s:GridColumn width="90" dataField="portable" headerText="Portable" ></s:GridColumn> 
    					<s:GridColumn width="100" dataField="email" headerText="Email" ></s:GridColumn> 
    				</s:ArrayList> 
    			</s:columns> 
    		</s:DataGrid>
     
    </s:Application>
    Rien ne s'affiche dans le datagrid malheureusement. Mais quand je remplace le contenu du s:datagrid par le code suivant :
    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
     
    <mx:DataGrid id="myGrid" 
    		dataProvider="{myRemote.getContacts.lastResult}"
    		creationComplete="myGrid_creationCompleteHandler(event)"
    		editable="true"
    		rowCount="{ myRemote.getContacts.lastResult.length > 8 ? 8 : myRemote.getContacts.lastResult.length }"
    					   >
    			<mx:columns>
    				<mx:DataGridColumn dataField="nomaffiche" editable="false"/>
    				<mx:DataGridColumn dataField="nom" headerText="Nom"/>
    				<mx:DataGridColumn dataField="prenom" headerText="Prénom"/>
    				<mx:DataGridColumn dataField="societe" headerText="Société"/>
    				<mx:DataGridColumn dataField="portable" headerText="Portable"/>
    				<mx:DataGridColumn dataField="email" headerText="Email"/>
    			</mx:columns>
    </mx:DataGrid>
    Le tableau se remplit bien des données mysql. Pourquoi cette différence de comportement entre un s:datagrid et un mx:datagrid ?

    Cordialement.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 17
    Par défaut
    Après recherche intensive sur le net depuis 2 semaines, autant sur les sites anglais que français, je n'ai trouvé aucun exemple qui montrait que amfphp fonctionnait avec un composant spark.

    J'en déduis que ce n'est pas possible !!!

    J'ai le même problème entre un s:List et mx:List

    Il ne me reste plus qu'à utiliser zend pour mes projets. En plus l'affichage des données mysql parait plus rapide.

    Dommage, amfphp semblait plus simple à implémenter.

  3. #3
    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
    Par défaut
    Bonjour,

    il est tout a fait possible d'utiliser amfphp avec tous les composants flex. Amfphp n'est qu'un pont/tunnel pour faire passer les données et n'a rien a voir avec les composants graphiques que tu peux utiliser.

    Je te conseille tout d'abord d'éviter de binder le dataprovider sur la propriété lastResult mais plutot d'écouter les event d'erreur de result que propose le RemoteObject, ensuite dans le result tu affectes tes resultats au dataprovider de ta datagrid (sous réserve que le résultat implemente IList).

    Passe en mode debug avec un point d'arret dans le handler de result pour voir ce que te retournes ton serveur, surement un probleme de donnée.

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  4. #4
    Membre confirmé Avatar de vedder
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2003
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 166
    Par défaut
    les composants n'ont rien a voir avec Amfphp qui n'est effectivement qu'une passerelle entre un web service PHP et flash .

    la ou se situe ton probleme est que tu pense pouvoir recuperer le result de ton remoteobject en synchrone alors que le resultat te sera renvoye en asynchrone.
    ne binde pas ton dataprovider, rajoute l'ecouteur eventresult.result et affecte à ce moment la , pas avant

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 17
    Par défaut
    Merci vous me rassurez.

    Reste à savoir maintenant comment faire ça.

    Je ne maitrise pas le concept des events. Et ce n'est pas faute d'avoir lu.

    Si vous avez une documentation ou un exemple de code qui me permet de faire ce que vous me préconisez, je suis tout ouïe.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 17
    Par défaut
    J'ai suivi vos pistes et tenté le code suivant :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
    			   xmlns:s="library://ns.adobe.com/flex/spark"
    			   xmlns:mx="library://ns.adobe.com/flex/mx"
    			  	   minWidth="750" 
    			   			   >
     
     
     
    	<fx:Script> 
    		<![CDATA[ 
     
    			import mx.events.FlexEvent;
    			import mx.rpc.events.FaultEvent;
    			import mx.rpc.events.ResultEvent;
     
    			import vo.ContactVO;
     
     
    			private function onFaultHandler(event:FaultEvent):void
    			{
    				trace(event.fault.faultDetail);
    			}
     
     
    			protected function myGrid_creationCompleteHandler(event:FlexEvent):void
    			{
     
    				myRemote.getContacts(); 
     
    			}
     
    			private function onResultHandler(event:ResultEvent):void
    			{
    				myGrid.dataProvider = event.result as ArrayList;
     
    			}
     
     
    		]]> 
    	</fx:Script> 
     
    	<fx:Declarations>
    		<s:RemoteObject id="myRemote" destination="ContactService" source="ContactService"
    						 endpoint="http://localhost/Contacts-debug/Amfphp/" showBusyCursor="true"
    						 fault="onFaultHandler(event)" result="onResultHandler(event)" />
     
    	</fx:Declarations>
     
     
    		<s:DataGrid id="myGrid" width="50%" bottom="10"
    					creationComplete="myGrid_creationCompleteHandler(event)"
    					editable="false" horizontalCenter="0" verticalCenter="0"
    					requestedRowCount="8" selectionMode="multipleRows" visible="true" >
    			<s:columns> 
    				<s:ArrayList> 
    					<s:GridColumn width="50" dataField="id_contact" headerText="ID" editable="false"></s:GridColumn> 
    					<s:GridColumn width="100" dataField="nomaffiche" headerText="Nom à afficher" ></s:GridColumn> 
    					<s:GridColumn width="100" dataField="nom" headerText="Nom" ></s:GridColumn> 
    					<s:GridColumn width="90" dataField="prenom" headerText="Prénom" ></s:GridColumn> 
    					<s:GridColumn width="150" dataField="societe" headerText="Société" ></s:GridColumn> 
    					<s:GridColumn width="90" dataField="portable" headerText="Portable" ></s:GridColumn> 
    					<s:GridColumn            dataField="email" headerText="Email" ></s:GridColumn> 
    				</s:ArrayList> 
    			</s:columns> 
    		</s:DataGrid>
     
    </s:Application>
    Cependant en mode debug, myGrid.dataProvider = null alors que event.result contient bien les données mysql que je veux afficher.
    Qu'est-ce qui peut bien clocher ?

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

Discussions similaires

  1. [SPARK] DataGrid columns
    Par gunsailor dans le forum MXML
    Réponses: 2
    Dernier message: 27/07/2012, 20h33
  2. [Spark] datagrid checkbox
    Par Tan dans le forum Flex
    Réponses: 2
    Dernier message: 09/02/2012, 09h41
  3. flex amfphp datagrid
    Par G4uthier dans le forum Flex
    Réponses: 2
    Dernier message: 03/07/2009, 15h25
  4. [VB6] Datagrid afficher ou cacher des colonnes par code
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 06/02/2003, 17h19
  5. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 16h37

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