Pregunta

Tengo un problema con un AdvancedDataGrid; Quiero que los campos Real y Estimado cambien con la función del temporizador, pero no funciona. Solo funciona al actualizar todo el anuncio con el colapso de la estructura de árbol. Quiero que si el árbol está " explotó " solo se actualizan los campos reales y estimados. Perdón por mi inglés incorrecto. Aquí está el código

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication initialize="init();" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.utils.ArrayUtil;
            import mx.collections.*;
            import flash.utils.Timer;
            import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
            [Bindable]
            public var randomNumber:Number = new Number
            public function randomValues():Number
            {
            randomNumber=Math.random()*100
            randomNumber*=100
            randomNumber=Math.round(randomNumber)
            randomNumber/=100
            trace(randomNumber)
            return randomNumber
            }   
            public var timer:Timer = new Timer(20);
            public function timing():void{
            timer.addEventListener(TimerEvent.TIMER,function(event:Event):void{randomValues()});
            }
            [Bindable]
            public var dpFlat:ArrayCollection = new ArrayCollection;
            public function dpCollection():ArrayCollection
            {
            dpFlat= new ArrayCollection([
            {Continente:"Europa", Paese:"Italia", Actual:randomValues(), Estimate:randomValues()},
            {Continente:"Europa", Paese:"Germania", Actual:randomValues(), Estimate:randomValues()}
                ]);
            return dpFlat;
            }

            public function init():void{
            dpCollection()
            randomValues()  
            }


        ]]>
        </mx:Script>
        <mx:AdvancedDataGrid horizontalScrollPolicy="on" columnWidth="100" resizableColumns="false" id="myADG" width="469" height="223" color="0x323232" initialize="gc.refresh();">        
                <mx:dataProvider>
                <mx:GroupingCollection id="gc" source="{dpCollection()}">
                    <mx:grouping>
                        <mx:Grouping>
                            <mx:GroupingField name="Continente"/>
                            <mx:GroupingField name="Paese"/>
                        </mx:Grouping>
                    </mx:grouping>
                </mx:GroupingCollection>
                </mx:dataProvider>        

            <mx:columns>
                <mx:AdvancedDataGridColumn dataField="Continente"/>
                <mx:AdvancedDataGridColumn dataField="Paese"/>
                <mx:AdvancedDataGridColumn id="act" dataField="Actual"/>
                <mx:AdvancedDataGridColumn id="est" dataField="Estimate"/>


            </mx:columns>
    </mx:AdvancedDataGrid>
    <mx:TextArea text="{randomNumber}" x="477" y="10"/>
    <mx:Button click="timing()" x="10" y="231" label="Start timing function"/>
    <mx:Button click="timer.start()" x="161" y="231" label="Start the time"/>
    <mx:Button click="timer.stop()" x="275" y="231" label="Stop the time"/>
</mx:WindowedApplication>
¿Fue útil?

Solución

No está cambiando el dataProvider en el controlador de Timer . Solo está llamando al método randomValues ??() que simplemente devuelve un número.

Llame a gc.source = dpCollection (); desde el controlador del temporizador.


Actualización: Aparentemente , IGroupingCollection no detecta cambios en un grupo automáticamente, por lo que debe llamar al método refresh () para actualizar la vista después de configurar la propiedad del grupo.

Parece que hay una solución a este problema here

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top