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

Reply via email to