我以一定的频率从httpservice接收到这样的字符串: 1#3#234525234 where row#column#value我想要将上面的字符串实时显示到datagrid中;目前我的代码显示了整个字符串,由许多类似上面的字符串组成。我该如何解决这个问题?提前感谢
我有以下代码
<?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>
发布于 2010-01-04 21:33:59
首先,循环似乎是错误的,您迭代了一个字符串source,而不是一个数组。其次,您的网格应该绑定到存储在dataProvider中的对象的某些属性(数组、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>https://stackoverflow.com/questions/1999283
复制相似问题