2010-01-04 75 views
1

我從HTTPService在接收以一定的頻率是這樣的字符串: 1#3#234525234 其中 行#列#值 我想顯示成在數據網格實時上面的字符串;目前我的代碼顯示了整個字符串,由上面的字符串組成。 我該如何解決這個問題? 在此先感謝動態數據網格的HTTPService

我有以下代碼

<?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> 

回答

0

首先,循環似乎是錯的,你遍歷字符串source,而不是一個數組。其次,您的網格應綁定到dataProvider(Array,ArrayCollection等)中存儲的對象的某些屬性。所以數據提供者不應該是一個字符串,就像你的代碼一樣。 唉,dataField是存儲在dataProvider中的對象字段的名稱,該值應顯示在網格單元格中。

基本上,您需要解析傳入的字符串,將每行存儲在一個對象中並將所有這些對象存儲在一個集合中。

所以,代碼應該是這樣的:

[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

這是行不通的,我想是因爲在你的代碼省略了#分離 – Franky 2010-01-04 14:42:23

+0

是的,當然,你需要添加'VAR數據:數組= source.split('#');'在循環之前。 – Hrundik 2010-01-04 16:41:06

+0

仍然無法正常工作,datagrid什麼都不顯示 – Franky 2010-01-04 16:58:26