No simple example handy, but it is straightforward.

 

Declare a Class, implement public properties using either public variables
or getter/setter functions.

 

You could probably find an example if you search.

 

Tracy Spratt,

Lariat Services, development services available

  _____  

From: [email protected] [mailto:[email protected]] On
Behalf Of Angelo Anolin
Sent: Thursday, May 28, 2009 1:48 AM
To: [email protected]
Subject: Re: [flexcoders] Converting XML Data Retrieved from Web Service to
ArrayCollection

 






Hi Tracy,

 

Thanks for the response.

 

You mentioned something about creating a VO with strongly typed properties.
Care to show some links/examples on how to achieve this?

 

Thanks.

Regards,

 

Angelo

 

  _____  

From: Tracy Spratt <[email protected]>
To: [email protected]
Sent: Thursday, 28 May, 2009 11:33:14
Subject: RE: [flexcoders] Converting XML Data Retrieved from Web Service to
ArrayCollection

I suggest that in your "serviceResultHandle r" you do something like:

 

var oTemp:Object

var xl:XMLList = _xmlData.children( );

For ( var i:int=0;xl.length( );i++)  {

  oTemp = { SupplierID:xl[ i].SupplierId. text(), CompanyName:
xl[i].CompanyName. text(), .  }

  arrDP.addItem( oTemp);

}

 

Still better would be to create a VO with strongly typed properties(Supplier
ID. etc) rather than the generic Object.

 

Tracy Spratt,

Lariat Services, development services available

  _____  

From: flexcod...@yahoogro ups.com [mailto: flexcod...@yahoogro ups.com ] On
Behalf Of Angelo Anolin
Sent: Wednesday, May 27, 2009 8:10 PM
To: flexcod...@yahoogro ups.com
Subject: [flexcoders] Converting XML Data Retrieved from Web Service to
ArrayCollection

 





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>
http://www.adobe. com/2006/ mxml" 
    layout="vertical" 
    backgroundGradientC olors="[# 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:ArrayCollecti on = new ArrayCollection;
   
   private function getGridData( ):void
   {
    CursorManager. setBusyCursor( );

    var service:WebService = new WebService() ;
    
    service.addEventLis tener(ResultEven t.RESULT, serviceResultHandle r);
    service.addEventLis tener(FaultEvent .FAULT, serviceFaultHandler );
    service.loadWSDL( " <http://localhost:55841/Service1.asmx?WSDL>
http://localhost: 55841/Service1. asmx?WSDL");
    service.RetrieveSup pliers2() ;
    arrDP = new ArrayCollection( mx.utils. ArrayUtil. toArray(_ xmlData)) ;
   }
   
   private function serviceResultHandle r(event:ResultEv ent) :void
   {
    CursorManager. removeBusyCursor ();
    _xmlData = XML(event.result) ;
    this.MydataGrid. visible = true;
   }
   
   private function serviceFaultHandler (event:FaultEven t) :void
   {
    CursorManager. removeBusyCursor ();
    Alert.show(String( event.fault) , "Error");
    this.btnLoad. enabled = true;
   }
   
   private function sortNumericColumn( itemA:Object, itemB:Object) : int
   {
    return ObjectUtil.numericC ompare(itemA. SupplierID, itemB.SupplierID) ;
   }
   
   private function searchFilterGrid( e:Event) :void
   {
    e.stopImmediateProp agation()
    if(txtSearch. text == '')
    {
     arrDP.filterFunctio n = null;
    }
    else
    {
     arrDP.filterFunctio n = textFilter;
    }
   }
   
   private function textFilter(item: Object) :Boolean
   {
    return item.CompanyName. toLowerCase( ).indexOf( txtSearch.
text.toLowerCase ()) != -1;
   }
  ]]>
 </mx:Script>
 
 <mx:HBox height="50"
    width="100%"
    horizontalScrollPol icy="off"
    verticalScrollPolic y="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="searchFilte rGrid(event)
" />
  <mx:CheckBox label="Filter" />
  <mx:Label id="lblRecordCount" />
 </mx:HBox>
 
 <mx:VBox horizontalCenter= "0" 
    verticalCenter= "0" 
    horizontalScrollPol icy="off"
    verticalScrollPolic y="off"
    height="100% "
    width="100%" >
  <mx:HBox width="70%" height="100% " borderStyle= "solid">
   <mx:DataGrid id="MydataGrid" 
       creationComplete= "getGridData( );" 
       horizontalScrollPol icy="on" 
       width="100%" 
       height="100% " 
       visible="false" 
       dataProvider= "{_xmlData. *}" 
       itemClick="getDataI tems();" >
    <mx:columns>
     <mx:DataGridColumn headerText=" ID" dataField="Supplier ID"
sortCompareFunction ="sortNumericCol umn" width="30"/>
     <mx:DataGridColumn headerText=" Company Name" dataField="CompanyN ame"
width="200"/>
     <mx:DataGridColumn headerText=" Contact Name" dataField="ContactN ame"
width="150"/>
     <mx:DataGridColumn headerText=" Contact Title" dataField="ContactT
itle" 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