28avr/093
Flex Chart – Ajouter des Series à la volée en ActionScript
Dans l'exemple précédent sur les Charts Flex, on a crée un Chart en remplaçant les series existantes.
Dans cet exemple, on va créer 2 ColumnSeries et leur assigner un data provider. On va ensuite créer un Array qui va contenir les Series existantes, et rajouter (push) de nouvelles séries à cet Array.
Enfin, on va assigner la propriété "series" du Chart à ce nouvel Array de Series:
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import mx.collections.ArrayCollection;
import mx.charts.series.ColumnSeries;
[Bindable]
private var profit04:ArrayCollection = new ArrayCollection([
{Month: "Jan", Profit: 2000},
{Month: "Feb", Profit: 1000},
{Month: "Mar", Profit: 1500}
]);
[Bindable]
private var profit05:ArrayCollection = new ArrayCollection([
{Month: "Jan", Profit: 2200},
{Month: "Feb", Profit: 1200},
{Month: "Mar", Profit: 1700}
]);
[Bindable]
private var profit06:ArrayCollection = new ArrayCollection([
{Month: "Jan", Profit: 2400},
{Month: "Feb", Profit: 1400},
{Month: "Mar", Profit: 1900}
]);
private var series1:ColumnSeries;
private var series2:ColumnSeries;
private function addMoreSeries():void {
if (!series1 || !series2) {
series1 = new ColumnSeries();
series1.dataProvider = profit05;
series1.yField = "Profit";
series1.xField = "Month";
series1.displayName = "2005";
series2 = new ColumnSeries();
series2.dataProvider = profit06;
series2.yField = "Profit";
series2.xField = "Month";
series2.displayName = "2006";
var currentSeries:Array = myChart.series;
currentSeries.push(series1);
currentSeries.push(series2);
myChart.series = currentSeries;
}
}
private function resetApp():void {
myChart.series = [ series0 ];
series1 = null;
series2 = null;
}
]]></mx:Script>
<mx:Panel title="Column Chart">
<mx:ColumnChart id="myChart" dataProvider="{profit04}" showDataTips="true">
<mx:horizontalAxis>
<mx:CategoryAxis categoryField="Month"/>
</mx:horizontalAxis>
<mx:series>
<mx:ColumnSeries dataProvider="{profit04}"
id="series0"
yField="Profit"
xField="Month"
displayName="2004"
/>
</mx:series>
</mx:ColumnChart>
<mx:Legend dataProvider="{myChart}"/>
</mx:Panel>
<mx:HBox>
<mx:Button id="b1" label="Ajouter de nouvelles Series" click="addMoreSeries()"/>
<mx:Button id="b2" label="RAZ" click="resetApp()"/>
</mx:HBox>
</mx:Application>
Flex Source Code Download: Télécharger le code source complet de l'application
This movie requires Flash Player 11
Articles similaires
- Flex Chart – Utiliser un Array d'Object comme dataProvider (ActionScript)
- Flex Chart – Utiliser un Array d'Object comme dataProvider (MXML)
- Flex Chart – Utiliser un ArrayCollection comme dataProvider (ActionScript)
- Flex Chart – Créer des Charts en ActionScript
- Flex Chart – Le composant ColumnChart (exemples)
Commentaires (3)
Trackbacks (0)
(Souscrire aux commentaires de cet article)
Aucun trackbacks pour l'instant






5 mai 2009
bonjour, tout d'abord merci pour ces tutoriels qui m'aident beaucoup pour mon stage.
j'aurais une question à propos du code suivant:
Dans l'ArrayCollection, vous mettez des
!!
De quel type sont ces objets? Etant donné que je dois créer des données à partir d'un fichier xml (qui provient d'une sérialisation d'une hashmap Java) je ne peux pas les créer comme vous le faite et je ne peux pas non plus le faire comme vous le faites dans votre tutoriel sur les données xml et les charts.
merci d'avance.
5 mai 2009
Ces objets sont du type le plus basique c'est à dire Object ( la notation {} est équivalente à "new Object"). Month et Profit sont des propriétés de cet objet. "Bidule" et 1 sont les valeur correspondantes.
Tu peux utiliser des Object comme ceci ou bien créer ta propre classe (model) avec ses propriétés public, ce qui est plus propre
Fabien
7 mai 2009
bonjour,
tout d'abord merci pour cette réponse. Ensuite, pourrais je vous "embêtez" un petit peu plus car j'ai un problème avec mon projet Flex ? (par mail ça serait plus commode notamment pour ne pas polluer ces commentaires avec un trop plein de code). Si vous pouviez me répondre par mail, ça serait sympa.
Merci d'avance.