Flex: Wrapping an ArrayCollection of Arrays

7 04 2009

April 15, 2009 Update: Unfortunately, DynamicCollection performs badly when the underlying arrays exceed a thousand elements. Stay tuned for an update.

What if you have a few Arrays or ArrayCollections of the same object data, and you want them to display as a single dataProvider? 

Using the below schema as an example, say you loaded a list of Projects from the DB and you want to display all the Companies in a single DataGrid. Or a list of all Employees. How would you do it?

Example SchemaSure you could append them all to one big Array or ArrayCollection. Although you leave open the door for inconsistencies when you add a Company to some Project object.

This is where the DynamicCollection comes in.

Essentially it is an ArrayCollection containing Arrays of the same object type.

However, when iterated over, it behaves as a single ArrayCollection. 

This means, when you alter the source arrays, the DynamicCollection will change also. 

I have written the solution twice, once using Arrays and once using ArrayCollections as the elements. If you use the former,  you have to call “refresh()” on the collection after updating any of the child arrays to enable databinding.

I’ve found it better to stick to Arrays noting that from Jon Rose’s blog and examples, you lose performance with a high number of ArrayCollections. 

Below is the DynamicCollection class and an example implementation.

NOTE: I haven’t had the time to test it out with other ListBase implementations – feel free to comment on any issues you encounter.


Live Demo and source is here

(Right-click flash movie to view source).




Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: