[EDIT] to get an XMLList from_xmlData :
> arrDP = new XMLListCollection( _xmlData.children() ); > --- thomas 2009/5/28 thomas parquier <[email protected]> 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 >> >> >> > >

