动态数据网格 Httpservice

发布于 2024-08-16 08:30:45 字数 2385 浏览 1 评论 0原文

我以一定的频率从 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>

I receive from the httpservice with a certain frequency a string like this:
1#3#234525234
where
row#column#value
I want to display into datagrid the above string at real time; at the moment my code displays the whole string, composed by many strings like the one above.
How can i solve the problem?
Thanks in advance

I have the following code

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

韬韬不绝 2024-08-23 08:30:45

首先,循环似乎是错误的,您迭代的是字符串 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>

First of all, the loop seems to be wrong, you iterate over a string source, not an array.
Secondly, your grid should bind to some properties of objects stored in a dataProvider (Array, ArrayCollection, etc.). So the data provider shouldn't be a string, as in your code.
Thridly, dataField is the name of the field of the object stored in the dataProvider, which value should be displayed in the grid cell.

Basicly, you need to parse your incoming string, store each row in an object and store all these objects in a collection.

So, the code should be something like:

[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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文