2010-01-04 15 views
1

que je reçois de la HTTPService avec une certaine fréquence une chaîne comme ceci: 1 # 3 # 234525234 où rangée # colonne # valeur Je veux afficher dans DataGrid la chaîne ci-dessus en temps réel; en ce moment, mon code affiche toute la chaîne, composée de nombreuses chaînes comme celle ci-dessus. Comment puis-je résoudre le problème? Merci à l'avancedynamique DataGrid HttpService

J'ai le code suivant

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
xmlns="*" creationComplete="srv.send()" > 
<mx:Script> 
<![CDATA[ 
    import mx.effects.effectClasses.AddItemActionInstance; 
    import mx.effects.AddItemAction; 
    import mx.collections.ArrayCollection; 
    import mx.controls.dataGridClasses.DataGridColumn; 
    import mx.events.*; 
     import mx.rpc.events.ResultEvent; 
     import mx.rpc.events.InvokeEvent; 
     import mx.rpc.events.FaultEvent; 
     import mx.rpc.AsyncRequest; 
     import mx.rpc.AsyncResponder; 
     import mx.rpc.AsyncToken; 
     import mx.rpc.AbstractInvoker; 
     import mx.controls.Alert; 
     import mx.core.Container; 
     import mx.core.IDataRenderer; 
     import mx.controls.dataGridClasses.DataGridItemRenderer; 
     import mx.controls.DataGrid; 
     import flash.display.DisplayObject; 
     [Bindable] 
     public var i:Number; 
     public var source:String; 
     [Bindable] 
     public var row:Array; 
     public var column:Array; 
     public var value:Array; 
     public function cycle(source:String):void 
     { 
     var data:Array = source.split('#'); 
     i=0; 
     for each(data in source) 
     { 
     row[i]=data[i] 
     column[i]=data[i+1] 
     value[i]=data[i+2] 

     i=i+3 
     } 
     } 

]]> 
    </mx:Script>  
    <mx:HTTPService 
    id="srv" 
    url="http://10.15.20.75/server4flex/servlet/Datagen" 
    method="GET" 
    /> 
    <mx:TextArea text="{cycle(srv.lastResult.toString())}" x="10" y="50" 
    width="699" height="59"/> 
    <mx:AdvancedDataGrid dataProvider="{source}" liveScrolling="true" id="dg" 
    x="10" y="117" width="621"> 
      <mx:columns> 
        <mx:AdvancedDataGridColumn dataField="{row[i]}" 
       headerText="Riga"/> 
        <mx:AdvancedDataGridColumn dataField="{column[i]}" 
       headerText="Colonna"/> 
        <mx:AdvancedDataGridColumn dataField="{value[i]}" 
       headerText="Valore"/> 
      </mx:columns> 
    </mx:AdvancedDataGrid> 

Répondre

0

Tout d'abord, la boucle semble être mal, vous itérer sur une chaîne source, pas un tableau. Deuxièmement, votre grille doit se lier à certaines propriétés des objets stockés dans un dataProvider (Array, ArrayCollection, etc.). Le fournisseur de données ne doit donc pas être une chaîne, comme dans votre code. Thridly, dataField est le nom du champ de l'objet stocké dans le dataProvider, valeur qui doit être affichée dans la cellule de la grille. Fondamentalement, vous devez analyser votre chaîne entrante, stocker chaque ligne dans un objet et stocker tous ces objets dans une collection.

Ainsi, le code doit être quelque chose comme:

[Bindable] 
private var dataList:ArrayCollection; 

public function cycle(source:String):void 
{ 
var ac:ArrayCollection = new ArrayCollection(); 
for(var i:int = 0; i < data.length; i += 3) { 
var dataObj:Object = {row: data[i], column: data[i+1], value: data[i+2]}; 
ac.addItem(dataObj); 
} 
dataList = ac; 
} 

<mx:AdvancedDataGrid dataProvider="{dataList}" liveScrolling="true" id="dg" 
    x="10" y="117" width="621"> 
      <mx:columns> 
         <mx:AdvancedDataGridColumn dataField="row" 
       headerText="Riga"/> 
         <mx:AdvancedDataGridColumn dataField="column" 
       headerText="Colonna"/> 
         <mx:AdvancedDataGridColumn dataField="value" 
       headerText="Valore"/> 
      </mx:columns> 
    </mx:AdvancedDataGrid> 
+0

cela ne fonctionne pas, je pense à cause du séparateur # omis dans votre code – Franky

+0

Oui, bien sûr, vous devez ajouter 'var data: Array = source.split ('#'); 'avant la boucle. – Hrundik

+0

ne fonctionne toujours pas, datagrid n'affiche rien – Franky