动态datagrid Httpservice

时间:2010-01-04 12:32:45

标签: flex datagrid asynchronous httpwebrequest real-time

我从httpservice收到一定频率的字符串,如下所示: 1#3#234525234 哪里 行号列#值 我想实时显示上面的字符串数据网格;目前,我的代码显示整个字符串,由许多字符串组成,如上所述。 我该如何解决这个问题? 提前致谢

我有以下代码

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

1 个答案:

答案 0 :(得分:0)

首先,循环似乎是错误的,你遍历字符串source,而不是数组。 其次,您的网格应绑定到存储在dataProvider(Array,ArrayCollection等)中的对象的某些属性。因此,数据提供程序不应该是字符串,就像在代码中一样。 第三,dataFielddataProvider中存储的对象字段的名称,该值应显示在网格单元格中。

基本上,您需要解析传入的字符串,将每行存储在对象中并将所有这些对象存储在集合中。

所以,代码应该是这样的:

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