You could use an XMLListCollection : > private var arrDP:XMLListCollection; > ... > arrDP = new XMLListCollection( _xmlData ); >
thomas --- http://www.web-attitude.fr/ msn : [email protected] softphone : sip:[email protected] <sip%[email protected]> téléphone portable : +33601 822 056 2009/5/28 Angelo Anolin <[email protected]> > > > Hi FlexCoders, > I am able to retrieve an XML data from a backend (ASP.NET) webservice and > simultaneously, bind it to my datagrid. > > I want to convert the XML data to an ArrayCollection and bind that Array > Collection to the datagrid instead of the XML data. > > The conversion needs to be done so that I could implement a search/filter > functionality for my datagrid. > > Here's some of the codes I have: > > <?xml version="1.0" encoding="utf-8"?> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > layout="vertical" > backgroundGradientColors="[#FFCC00, #993300]" > horizontalAlign="left" > > <mx:Script> > <![CDATA[ > import mx.utils.ArrayUtil; > import mx.collections.ArrayCollection; > import mx.controls.Alert; > import mx.rpc.events.FaultEvent; > import mx.rpc.events.ResultEvent; > import mx.rpc.soap.mxml.WebService; > import mx.managers.CursorManager; > import mx.managers.PopUpManager; > import mx.utils.ObjectUtil; > > /** > * @bindable > * @private > * @property Will hold the data passed from the web service. > */ > [Bindable] > private var _xmlData:XML; > > [Bindable] > private var arrDP:ArrayCollection = new ArrayCollection; > > private function getGridData():void > { > CursorManager.setBusyCursor(); > var service:WebService = new WebService(); > > service.addEventListener(ResultEvent.RESULT, serviceResultHandler); > service.addEventListener(FaultEvent.FAULT, serviceFaultHandler); > service.loadWSDL("http://localhost:55841/Service1.asmx?WSDL"); > service.RetrieveSuppliers2(); > arrDP = new ArrayCollection(mx.utils.ArrayUtil.toArray(_xmlData)); > } > > private function serviceResultHandler(event:ResultEvent) :void > { > CursorManager.removeBusyCursor(); > _xmlData = XML(event.result); > this.MydataGrid.visible = true; > } > > private function serviceFaultHandler(event:FaultEvent) :void > { > CursorManager.removeBusyCursor(); > Alert.show(String(event.fault), "Error"); > this.btnLoad.enabled = true; > } > > private function sortNumericColumn(itemA:Object, itemB:Object): int > { > return ObjectUtil.numericCompare(itemA.SupplierID, itemB.SupplierID); > } > > private function searchFilterGrid(e:Event) :void > { > e.stopImmediatePropagation() > if(txtSearch.text == '') > { > arrDP.filterFunction = null; > } > else > { > arrDP.filterFunction = textFilter; > } > } > > private function textFilter(item:Object) :Boolean > { > return > item.CompanyName.toLowerCase().indexOf(txtSearch.text.toLowerCase()) != -1; > } > ]]> > </mx:Script> > > <mx:HBox height="50" > width="100%" > horizontalScrollPolicy="off" > verticalScrollPolicy="off"> > <mx:ComboBox > > <mx:dataProvider> > <mx:Array> > <mx:String>All</mx:String> > <mx:String>Supplier ID</mx:String> > <mx:String>Company Name</mx:String> > <mx:String>Contact Name</mx:String> > <mx:String>Contact Title</mx:String> > <mx:String>Address</mx:String> > </mx:Array> > </mx:dataProvider> > </mx:ComboBox> > <mx:TextInput id="txtSearch" width="200" change="searchFilterGrid(event)" > /> > <mx:CheckBox label="Filter" /> > <mx:Label id="lblRecordCount" /> > </mx:HBox> > > <mx:VBox horizontalCenter="0" > verticalCenter="0" > horizontalScrollPolicy="off" > verticalScrollPolicy="off" > height="100%" > width="100%" > > <mx:HBox width="70%" height="100%" borderStyle="solid"> > <mx:DataGrid id="MydataGrid" > creationComplete="getGridData();" > horizontalScrollPolicy="on" > width="100%" > height="100%" > visible="false" > dataProvider="{_xmlData.*}" > itemClick="getDataItems();" > > <mx:columns> > <mx:DataGridColumn headerText="ID" dataField="SupplierID" > sortCompareFunction="sortNumericColumn" width="30"/> > <mx:DataGridColumn headerText="Company Name" dataField="CompanyName" > width="200"/> > <mx:DataGridColumn headerText="Contact Name" dataField="ContactName" > width="150"/> > <mx:DataGridColumn headerText="Contact Title" dataField="ContactTitle" > width="150"/> > <mx:DataGridColumn headerText="Address" dataField="Address" > width="250"/> > </mx:columns> > </mx:DataGrid> > </mx:HBox> > </mx:VBox> > </mx:Application> > > When I replace the dataProvider for the datagrid with this: > > dataProvider="{arrDP}" > > No data is shown on the datagrid. How can I then convert the XML to array > collection and subsequently, be able to bind it to my datagrid? > > I would appreciate your advice on this matter. > > Thanks and regards, > > Angelo > > >

