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
>
>  
>

Reply via email to