AdvancedDataGrid dataFields refresh
-
05-07-2019 - |
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>
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