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 :

Combobox Renderer : Fournisseur de données


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Par défaut Combobox Renderer : Fournisseur de données
    Voila, je dispose d'une datagrid avec diverses systèmes renderer, dont des combobox. Afin de remplir ces combobox, je récupère des données depuis une BDD externe dans le composant lui-même, toutefois ceci créé un temps de latence au moment du focus sur la datagrid.

    Y aurait-il un moyen que la source de données puisse être extraite depuis la fenêtre principale de l'application ? Ceci me permettrait de faire les extractions dès le lancement de l'appli.

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Salut,

    Et bien tout dépend de ton code et de tes appels services.
    Tu peux toujours lancer les appels au chargement de l'appli et populer tes modèles à loisir. Ensuite le binding fait son oeuvre.
    Ca va être un peu dur de t'aider sans code ni explication plus détaillée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Par défaut
    A l'heure actuelle, j'ai trouvé un moyen plutôt bon en chargeant les données dans des XML. Par la suite, je récupère ces XML dans les renderer concernés avec des tableaux, toutefois ça peut faire que chaque renderer ait sa version, faisant appel à beaucoup de mémoire pour chaque objets.

    Voici une partie du datagrid concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <mx:DataGrid id="itemDG_New" dataProvider="{AssociationsProduitsNew}" width="100%" height="25" headerHeight="0" editable="true">
    	<mx:columns>
    		<mx:DataGridColumn dataField="typeProduit" width="100" 
    				rendererIsEditor="true"  editorDataField="result" itemRenderer="renderer.TypeRenderer"/>
    		<mx:DataGridColumn dataField="codeTexte"/>
    		<mx:DataGridColumn dataField="codeImage"/>
    		<mx:DataGridColumn dataField="produit01" width="100"
    				rendererIsEditor="true"  editorDataField="result" itemRenderer="renderer.ProduitRenderer"/>
    	</mx:columns>
    </mx:DataGrid>
    Avec le code du module ProduitRenderer (désolé si c'est pauvre au niveau des commentaires) :

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" initialize="sessionConn.send();" show="newLoad();">
    	<mx:Script>
    		<![CDATA[	
    			import mx.collections.ArrayCollection;
    			import mx.collections.IViewCursor;
    			import mx.rpc.events.ResultEvent;
    			import mx.utils.object_proxy;
    			// Define a property for returning the new value to the cell.
    			public var result:String="";
     
    			[Bindable]
    			private var dpValue:Array = new Array();
    			private var allValue:Array = new Array();
    			private var open:Boolean = false;
    			private var lastType:String;
     
    			public function onChange():void 
    			{
    				var index:int = editor.selectedIndex;
    				result = dpValue[index].data;
    			}
     
    			private function select_pdt(event:ResultEvent):void
    			{				
    				var i:Number = -1;
    				var n:Number = -1;
    				lastType = data.typeProduit;
     
    				var tab:ArrayCollection = sessionConn.lastResult.Produit as ArrayCollection;
    				var cursor:IViewCursor = tab.createCursor();
     
    				while(!cursor.afterLast)
    				{					
    					var currentObj:Object = cursor.current;
     
    					allValue.push({code:currentObj["CodeProduit"], nom:currentObj["NomProduit"], type:currentObj["CodeTypeProduit"], niveau:currentObj["CodeNiveauProduit"], lblNiveau:currentObj["LibelleNiveauProduit"]});
     
    					if (currentObj["CodeTypeProduit"] == lastType)
    					{
    						i++;
     
    						dpValue.push({label:currentObj["CodeProduit"] + ':' +currentObj["NomProduit"] + '; ' + currentObj["CodeNiveauProduit"] + ':' + currentObj["LibelleNiveauProduit"], data:currentObj["CodeProduit"]});
     
    						if (data.produit01 == currentObj["CodeProduit"])
    						{
    							n = i;
    						}
     
    					}
     
    					cursor.moveNext();
    				}
     
    				editor.selectedIndex = n;
    			}
     
    			private function reload():void
    			{			
    				if(data.typeProduit != lastType)
    				{
    					lastType = data.typeProduit;
     
    					dpValue.length = 0;
     
    					var i:Number = -1;
    					var n:Number = -1;
     
    					for each(var obj:* in allValue)
    					{
    						if (obj.type == lastType)
    						{
    							i++;
     
    							dpValue.push({label:obj.code + ':' + obj.nom + '; ' + obj.niveau + ':' + obj.lblNiveau, data:obj.code});
     
    							if(obj.code == data.produit01)
    							{
    								n = i;
    							}
    						}
    					}
     
    					editor.selectedIndex = n;
    				}
    			}
     
    			private function newLoad():void
    			{
    				lastType = data.typeProduit;
     
    				dpValue.length = 0;
     
    				var i:Number = -1;
    				var n:Number = -1;
     
    				for each(var obj:* in allValue)
    				{
    					if (obj.type == lastType)
    					{
    						i++;
     
    						dpValue.push({label:obj.code + ':' + obj.nom + '; ' + obj.niveau + ':' + obj.lblNiveau, data:obj.code});
     
    						if(obj.code == data.produit01)
    						{
    							n = i;
    						}
    					}
    				}
     
    				editor.selectedIndex = n;
    			}
    		]]>
    	</mx:Script>
     
    	<mx:HTTPService id="sessionConn" url="http://10.10.12.18/amfphp/xml/Produit.xml" useProxy="false" result="select_pdt(event)"/>
     
    	<mx:ComboBox id="editor" dataProvider="{dpValue}" width="90" change="onChange()" dropdownWidth="500" focusIn="reload()"/>
    </mx:VBox>
    Y'a-t-il un moyen pour soit que le renderer puisse piocher dans un tableau appartenant au module principale, ou un système de variables pour initialiser le renderer ? Le second me serait bien utile afin d'éviter de démultiplier un même code pour quelques variations, mais à savoir si cela est possible.

Discussions similaires

  1. Plusieurs fournisseurs de données
    Par pc75 dans le forum Deski
    Réponses: 6
    Dernier message: 01/12/2006, 08h06
  2. Réponses: 3
    Dernier message: 30/09/2006, 17h19
  3. ComboBox éditable <-> Base de données
    Par jacklafrip dans le forum MFC
    Réponses: 5
    Dernier message: 26/09/2006, 10h33
  4. [VBA-E]COMBOBOX, et base de données
    Par legend dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/02/2006, 13h22
  5. Réponses: 4
    Dernier message: 30/03/2005, 18h30

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