<mx:DataGrid id="summaryGrid" dataProvider="{
makeSummary(usersGrid.dataProvider) }">Ah...that looks more like it! The only problem is that the summary grid is not regenerated if the source changes: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*"> <mx:Label text="Users:"/> <mx:DataGrid id="grd" editable="true" dataProvider="{users}"> <mx:columns> <mx:DataGridColumn editable="true" dataField="name" headerText="Name"/> <mx:DataGridColumn editable="true" dataField="dept" headerText="Department"/> </mx:columns> </mx:DataGrid> <mx:Button label="Add" click="{users.addItem(new SimpleUser('Test', 'IT'))}"/> <mx:Button label="Remove" click="{users.removeItemAt(grd.selectedIndex)}"/> <mx:Label text="Summary:"/> <mx:DataGrid dataProvider="{makeSummary(ArrayCollection(grd.dataProvider))}"/> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.events.CollectionEvent; [Bindable] private var users:ArrayCollection = new ArrayCollection([new SimpleUser("David", "IT"), new SimpleUser("Simon", "Management"), new SimpleUser("Andy", "Support"), new SimpleUser("Chris", "Management")]); private function makeSummary(source:ArrayCollection):ArrayCollection { var mCount:uint = 0; var iCount:uint = 0; var sCount:uint = 0; for (var i:uint=0; i < source.length; i++) { var user:SimpleUser = SimpleUser(source[i]); if (user.dept == "Management") { mCount++; } if (user.dept == "IT") { iCount++; } if (user.dept == "Support") { sCount++; } } var summary:ArrayCollection = new ArrayCollection([{Department:'Management', count: mCount}, {Department:'IT', count: iCount}, {Department:'Support', count: sCount}]); return summary; } ]]> </mx:Script> </mx:Application> package { [Bindable] public class SimpleUser { public function SimpleUser(name:String, dept:String):void { this.name = name; this.dept = dept; } public var name:String; public var dept:String; } }

