Componet Directory/DataGrid/Advanced/List

AdvancedDataGrid에서 그룹별 summary 지정하기

로드스타 2010. 8. 17. 11:12


Heirachy 구조의 경의 해당 그룹 노드에 summary값을 저장하기 위해서는 개별 SummaryField와 개별 SummaryRow를 지정 해 주어야 자체 합계를 다시 더 하지 않는다.

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" backgroundColor="#ffffff" >
 <mx:RemoteObject showBusyCursor="true" id="AdminDBHandler" destination="com.penta.ams.database.AdminDBHandler">
  
  <mx:method name="putMainGrid" result="getTrxDetailViewTableBizDataResultHandler(event)"
       fault="faultHandler(event)">
   <mx:arguments>
    <Type/>
   </mx:arguments>
  </mx:method>
  
  
 </mx:RemoteObject>
 <mx:Script>
  <![CDATA[
   import mx.collections.ArrayCollection;
   import mx.collections.Grouping;
   import mx.collections.GroupingCollection;
   import mx.collections.GroupingCollection2;
   import mx.collections.GroupingField;
   import mx.collections.HierarchicalData;
   import mx.collections.IHierarchicalCollectionView;
   import mx.collections.SummaryField2;
   import mx.collections.SummaryRow;
   import mx.rpc.events.FaultEvent;
   import mx.rpc.events.ResultEvent;


  

   [Bindable]
   private var dataGColl:GroupingCollection2;
   private var dataGrp:Grouping ;
   private var grpField1:GroupingField;
   private var grpField2:GroupingField;
   private var grpField3:GroupingField;
   private var sumRow1:SummaryRow;
   private var sumRow2:SummaryRow;
   private var sumRow3:SummaryRow;
   private var sumField1:SummaryField2;
   private var sumField2:SummaryField2;
   private var sumField3:SummaryField2;
   private var sumField4:SummaryField2;
   private var sumField11:SummaryField2;
   private var sumField12:SummaryField2;
   private var sumField13:SummaryField2;
   private var sumField14:SummaryField2;
   private var sumField21:SummaryField2;
   private var sumField22:SummaryField2;
   private var sumField23:SummaryField2;
   private var sumField24:SummaryField2;
   
   private var isFirst:Boolean;
   
   private var count:int = 0;
   private function grpOnjFunc(value:String):Object{
    // we need to assign the same uid for same grouped Objects
    // use count or value + count
    return {uid:value + count++};
   }
   
   public function initRemoting():void {
    isFirst = true;
    
    dataGColl = new GroupingCollection2();
    dataGColl.source = new ArrayCollection();
    dataGrp = new Grouping();
    dataGrp.groupingObjectFunction = grpOnjFunc;
    sumRow1 = new SummaryRow();
    sumRow2 = new SummaryRow();
    sumRow3 = new SummaryRow();
    
    grpField1 = new GroupingField("jijum_Name");
    grpField2 = new GroupingField("busGroup_Name");
    grpField3 = new GroupingField("bus_Name");
    
    sumRow1.summaryPlacement = "group";
    sumRow2.summaryPlacement = "group";
    sumRow3.summaryPlacement = "group";
    
    
    sumField1 = new SummaryField2("curTrx","SUM");
    sumField1.label = "curTrxSum";
    sumField2 = new SummaryField2("curRestime","SUM");
    sumField2.label = "curRestimeSum";
    sumField3 = new SummaryField2("totalTrx","SUM");
    sumField3.label = "totalTrxSum";
    sumField4 = new SummaryField2("totalErr","SUM");
    sumField4.label = "totalErrSum";
    
    sumField11 = new SummaryField2("curTrx","SUM");
    sumField11.label = "curTrxSum";
    sumField12 = new SummaryField2("curRestime","SUM");
    sumField12.label = "curRestimeSum";
    sumField13 = new SummaryField2("totalTrx","SUM");
    sumField13.label = "totalTrxSum";
    sumField14 = new SummaryField2("totalErr","SUM");
    sumField14.label = "totalErrSum";
    
    sumField21 = new SummaryField2("curTrx","SUM");
    sumField21.label = "curTrxSum";
    sumField22 = new SummaryField2("curRestime","SUM");
    sumField22.label = "curRestimeSum";
    sumField23 = new SummaryField2("totalTrx","SUM");
    sumField23.label = "totalTrxSum";
    sumField24 = new SummaryField2("totalErr","SUM");
    sumField24.label = "totalErrSum";
    
    sumRow1.fields = [sumField1, sumField2, sumField3, sumField4];
    sumRow2.fields = [sumField11, sumField12, sumField13, sumField14];
    sumRow3.fields = [sumField21, sumField22, sumField23, sumField24];
    
    grpField1.summaries = [sumRow1];
     grpField2.summaries = [sumRow2];
    grpField3.summaries = [sumRow3];
    
    dataGrp.fields = [ grpField1, grpField2,grpField3];
    
    dataGColl.grouping = dataGrp;
    
    AdminDBHandler.putMainGrid("1");
   }

   public function reRemoting():void{
    AdminDBHandler.putMainGrid("1");
   }
   
/*    public function getTrxDetailViewTableBizDataResultHandler(event:ResultEvent):void
   {
    
    var resultSet:ArrayCollection = event.result as ArrayCollection;
    dataGColl.source = resultSet;
    dataGrp.fields = [ new GroupingField("jijum_Name"), new GroupingField("busGroup_Name"), new GroupingField("bus_Name")];
    dataGColl.grouping = dataGrp;
    
    trxTable.dataProvider = dataGColl; 
    dataGColl.refresh();
   } */
   
   public function getTrxDetailViewTableBizDataResultHandler(event:ResultEvent):void
   {
    
    var resultSet:ArrayCollection = event.result as ArrayCollection;
    
    count = 0;
    if(isFirst){
     dataGColl.source = resultSet;
     trxTable.dataProvider = dataGColl;
     trxTable.validateNow();
     isFirst = false;
     
     dataGColl.refresh();
    }
    else{
     var openNodes:Object = IHierarchicalCollectionView(trxTable.dataProvider).openNodes;
     
       var newDataGColl:GroupingCollection2 = new GroupingCollection2();
     newDataGColl.source = resultSet;   
     newDataGColl.grouping = dataGrp; 
     newDataGColl.refresh();
     
     trxTable.dataProvider = newDataGColl;
     trxTable.validateNow();
     IHierarchicalCollectionView(trxTable.dataProvider).openNodes = openNodes;
     
    }
   } 
   
   public function faultHandler(event:FaultEvent):void
   {
    mx.controls.Alert.show(String(event.message));
   }
   public function myStyleFunc(data:Object, col:AdvancedDataGridColumn):Object 
            {
            if (data["status"] == "PRICING") 
                return {color:0xFF0000 , fontWeight:"bold" , backgroundColor:0xFF0000}; 
                 // Return null if the Artist name does not match.
            return null;     
         }

   
   
  ]]>
 </mx:Script>
 <mx:NumberFormatter useThousandsSeparator="true" id="nFormatter"/>
 <mx:AdvancedDataGrid id="trxTable"  x="0" y="0" visible="true" designViewDataType="tree" width="100%" height="100%" color="0x000000"  displayItemsExpanded="false" sortExpertMode='true'>
  <mx:groupedColumns>
   <mx:AdvancedDataGridColumn headerText="지점명" dataField="untBus_Name"  />
   <mx:AdvancedDataGridColumn headerText="처리건수"  dataField="curTrx" itemRenderer="com.penta.flex4.components.itemrenderer.TriangleItemRenderer" />
   <mx:AdvancedDataGridColumn headerText="응답시간" dataField="curRestime" itemRenderer="com.penta.flex4.components.itemrenderer.TriangleItemRenderer" />
   <mx:AdvancedDataGridColumn headerText="누적건수" dataField="totalTrx" itemRenderer="com.penta.flex4.components.itemrenderer.TriangleItemRenderer" />
   <mx:AdvancedDataGridColumn headerText="누적에러" dataField="totalErr"  itemRenderer="com.penta.flex4.components.itemrenderer.TriangleItemRenderer" />
  </mx:groupedColumns>
 </mx:AdvancedDataGrid>
</mx:Canvas>