代码之家  ›  专栏  ›  技术社区  ›  Fseee

动态数据网格Httpservice

  •  1
  • Fseee  · 技术社区  · 15 年前

    我从httpservice以特定频率接收到如下字符串: 1#3#234525234 哪里 行#列#值 我想在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>
    

    1 回复  |  直到 15 年前
        1
  •  0
  •   Hrundik    15 年前

    首先,循环似乎是错误的,您迭代了一个字符串 source ,而不是数组。 其次,网格应该绑定到存储在网格中的对象的某些属性 dataProvider 三,, dataField ,应在网格单元中显示哪个值。

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

    因此,代码应该是这样的:

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