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

Reply via email to