L’exemple suivant montre comment vous pouvez créer, en MXML, un fournisseur de données complexe pour un contrôle MX DataGrid avec des objets imbriqués en utilisant la balise <fx:Object>.
L’exemple suivant requiert Flash Player 10 et le SDK Adobe Flex 4. Vous pouvez télécharger la version d’évaluation d’Adobe Flash Builder 4 à l’adresse http://www.adobe.com/products/flex/. Pour télécharger la dernière version du SDK Flex 4, regardez http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex +4.
<?xml version="1.0" encoding="utf-8"?> <!-- http://blog.flexexamples.com/2010/10/20/creating-complex-data-provider-objects-in-mxml-using-flex-4/ --> <s:Application name="MX_DataGrid_dataProvider_Object_test" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <mx:DataGrid id="dg" horizontalCenter="0" verticalCenter="0"> <mx:columns> <mx:DataGridColumn dataField="firstName" /> <mx:DataGridColumn dataField="lastName" /> <mx:DataGridColumn dataField="address.town" /> <mx:DataGridColumn dataField="address.state" /> <mx:DataGridColumn dataField="address.zipCode" /> </mx:columns> <mx:dataProvider> <mx:ArrayCollection> <fx:Object firstName="Carol" lastName="F."> <fx:address> <fx:Object town="Waltham" state="MA" zipCode="02452" /> </fx:address> </fx:Object> <fx:Object firstName="Darrell" lastName="L."> <fx:address> <fx:Object town="Waltham" state="MA" zipCode="02452" /> </fx:address> </fx:Object> <fx:Object firstName="Hans" lastName="M."> <fx:address> <fx:Object town="San Francisco" state="CA" zipCode="94103" /> </fx:address> </fx:Object> <fx:Object firstName="Kevin" lastName="L."> <fx:address> <fx:Object town="San Francisco" state="CA" zipCode="94103" /> </fx:address> </fx:Object> </mx:ArrayCollection> </mx:dataProvider> </mx:DataGrid> </s:Application>
Ou vous pouvez aussi créer les objets imbriqués en utilisant ActionScript , comme vous pouvez le voir dans l’exemple suivant:
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2010/10/20/creating-complex-data-provider-objects-in-mxml-using-flex-4/ -->
<s:Application name="MX_DataGrid_dataProvider_Object_test"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
initialize="init();">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.DataGrid;
import mx.controls.dataGridClasses.DataGridColumn;
protected var dg:DataGrid;
protected function init():void {
var cols:Array = [];
cols.push(new DataGridColumn("firstName"));
cols.push(new DataGridColumn("lastName"));
cols.push(new DataGridColumn("address.town"));
cols.push(new DataGridColumn("address.state"));
cols.push(new DataGridColumn("address.zipCode"));
var arr:Array = [];
arr.push({firstName:"Carol", lastName:"F.", address:{town:"Waltham", state:"MA", zipCode:"02452"}});
arr.push({firstName:"Darrell", lastName:"L.", address:{town:"Waltham", state:"MA", zipCode:"02452"}});
arr.push({firstName:"Hans", lastName:"M.", address:{town:"San Francisco", state:"CA", zipCode:"94103"}});
arr.push({firstName:"Kevin", lastName:"L.", address:{town:"San Francisco", state:"CA", zipCode:"94103"}});
dg = new DataGrid();
dg.columns = cols;
dg.dataProvider = new ArrayCollection(arr);;
dg.horizontalCenter = dg.verticalCenter = 0;
addElement(dg);
}
]]>
</fx:Script>
</s:Application>
Vous pouvez aussi définir l’objet imbriqué en ligne dans le MXML en utilisant 2 caractères « { » au lieu d’1, comme vous pouvez le voir dans l’exemple suivant (ou le premier « { » correspond à la liaison de données et le second « { » correspond à la forme raccourcie de l’objet)
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2010/10/20/creating-complex-data-provider-objects-in-mxml-using-flex-4/ -->
<s:Application name="MX_DataGrid_dataProvider_Object_test"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<mx:DataGrid id="dg" horizontalCenter="0" verticalCenter="0">
<mx:columns>
<mx:DataGridColumn dataField="firstName" />
<mx:DataGridColumn dataField="lastName" />
<mx:DataGridColumn dataField="address.town" />
<mx:DataGridColumn dataField="address.state" />
<mx:DataGridColumn dataField="address.zipCode" />
</mx:columns>
<mx:dataProvider>
<mx:ArrayCollection>
<fx:Object firstName="Carol" lastName="F." address="{{town:'Waltham', state:'MA', zipCode:'02452'}}" />
<fx:Object firstName="Darrell" lastName="L." address="{{town:'Waltham', state:'MA', zipCode:'02452'}}" />
<fx:Object firstName="Hans" lastName="M." address="{{town:'San Francisco', state:'CA', zipCode:'94103'}}" />
<fx:Object firstName="Kevin" lastName="L." address="{{town:'San Francisco', state:'CA', zipCode:'94103'}}" />
</mx:ArrayCollection>
</mx:dataProvider>
</mx:DataGrid>
</s:Application>
Je suis Antony Chauviré, développeur sur la Flash Platform.