Enterprise APP

Advanced DataGrid Expand & Collapse... 본문

Componet Directory/DataGrid/Advanced/List

Advanced DataGrid Expand & Collapse...

로드스타 2010. 9. 3. 20:45


<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%"
       initialize="navigatorcontent1_initializeHandler(event)"
       creationComplete="group1_creationCompleteHandler(event)"
        show="navigatorcontent1_showHandler(event)"
     hide="navigatorcontent1_hideHandler(event)">
 <fx:Script>
  <![CDATA[
   import com.fusioncharts.components.FusionCharts;
   import com.penta.flex4.event.NHMessageEvent;
   import com.penta.flex4.manager.GlobalManager;
   
   import config.TranConfig;
   
   import mx.collections.ArrayCollection;
   import mx.collections.Grouping;
   import mx.collections.GroupingCollection2;
   import mx.collections.GroupingField;
   import mx.collections.HierarchicalCollectionView;
   import mx.collections.IHierarchicalCollectionView;
   import mx.collections.SummaryField2;
   import mx.collections.SummaryRow;
   import mx.events.AdvancedDataGridEvent;
   import mx.events.CollectionEvent;
   import mx.events.CollectionEventKind;
   import mx.events.FlexEvent;
   import mx.events.IndexChangedEvent;
   import mx.events.ResizeEvent;
   import mx.events.ScrollEvent;
   import mx.graphics.RadialGradient;

   private var appManager:GlobalManager;
   
   private var _currentIndex:int = 0;
   private var timer:Timer;
   private var isFirst:Boolean = true;
   private var messageArry:Array=new Array();
   
   //Hierarchy 저장
   private var vPos:int = 0;
   private var curOpenNodes:IHierarchicalCollectionView = new  HierarchicalCollectionView();;
   private var count:int = 0;
   private var openNodes:Object;
   
   [Bindable]
   private var tableGroupCollection:GroupingCollection2;
   
   private var group:Grouping ;
   private var sumRow1:SummaryRow;
   private var sumRow2:SummaryRow;
   
   private var gf1:GroupingField ;
   private var gf2:GroupingField ;
   
   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;
   
   
   
   public function get currentIndex():int
   {
    return _currentIndex;
   }

   public function set currentIndex(value:int):void
   {
    _currentIndex = value;
    vs.selectedIndex = value;
   }
   
   protected function navigatorcontent1_initializeHandler(event:FlexEvent):void
   {
    tableGroupCollection = new GroupingCollection2();
    tableGroupCollection.source = new ArrayCollection();
     group = new Grouping();
    group.groupingObjectFunction = grpOnjFunc;
     sumRow1 =new SummaryRow();
     sumRow2 =new SummaryRow();
    sumRow1.summaryPlacement="group";
    sumRow2.summaryPlacement="group";
    
     gf1 = new GroupingField("grpName");
     gf2 = new GroupingField("busName");
    
     sumField1 = new SummaryField2("curTrx","SUM");
     sumField2 = new SummaryField2("resTime","SUM");
     sumField3 = new SummaryField2("accNormal","SUM");
     sumField4 = new SummaryField2("accError","SUM");
    
    sumRow1.fields = [sumField1, sumField2, sumField3, sumField4];
    
     sumField11 = new SummaryField2("curTrx","SUM");
     sumField12 = new SummaryField2("resTime","SUM");
     sumField13 = new SummaryField2("accNormal","SUM");
     sumField14 = new SummaryField2("accError","SUM");
    
    sumRow2.fields = [sumField11, sumField12, sumField13, sumField14];
    
    gf1.summaries =[sumRow1];
    gf2.summaries =[sumRow2];
    
    group.fields = [gf1, gf2];
    tableGroupCollection.grouping = group;
    
    messageArry.push(NHMessageEvent.TRX_JOB_DETAIL_TRANSACTION_BIZ_MESSAGE);
    messageArry.push(NHMessageEvent.TRX_JOB_DETAIL_TRANSACTION_SVC_MESSAGE);
    messageArry.push(NHMessageEvent.TRX_JOB_DETAIL_TRANSACTION_LOC_MESSAGE);
    messageArry.push(NHMessageEvent.TRX_JOB_DETAIL_TRANSACTION_MED_MESSAGE);
    
    timer = new Timer(TranConfig.POLLING_TIME);
    timer.addEventListener(TimerEvent.TIMER, reRemotingHandler);
    
    
    if(tableGroupCollection != null)
     tableGroupCollection.removeEventListener(CollectionEvent.COLLECTION_CHANGE, returnPVPosition);
    
    tableGroupCollection.addEventListener(CollectionEvent.COLLECTION_CHANGE, returnPVPosition);
    
    
          trace("업무상세:업무별트랜잭션현황:init");
   }
   

   protected function group1_creationCompleteHandler(event:FlexEvent):void
   {
    appManager = GlobalManager.getInstance()
    appManager.addEventListener(NHMessageEvent.TRX_JOB_DETAIL_TRANSACTION_SUCCESS, updateHandler);
   }
   
  
   private function updateHandler(e:Event):void{
    
    
    var ac:ArrayCollection = new ArrayCollection();

    try{
     switch(currentIndex){
      case 0:
       
       ac.source = appManager.trxJobDetailGridAC.getItemAt(0) as Array;
       gf1 = new GroupingField("grpName");
       gf1.summaries =[sumRow1];
       group.fields = [gf1, gf2];
       tableGroupCollection.grouping = group;
       break;
      case 1:
       ac.source = appManager.trxJobDetailGridAC.getItemAt(0) as Array;
       gf1 = new GroupingField("svcGrpNm");
       gf1.summaries =[sumRow1];
       group.fields = [gf1];
       tableGroupCollection.grouping = group;
       break;
      case 2:
       tableGroupCollection.grouping = null;
       ac.source = appManager.trxJobDetailGridAC.getItemAt(1) as Array;
       break;
      case 3:
       tableGroupCollection.grouping = null;
       ac.source = appManager.trxJobDetailGridAC.getItemAt(1) as Array;
       break;
     }
    }catch(e:Error){}
    
   
       tableGroupCollection.source = ac;
    
    switch(currentIndex){
     case 0:
      
      if (trxTable.dataProvider is IHierarchicalCollectionView)
      {
       openNodes = IHierarchicalCollectionView(trxTable.dataProvider).openNodes;
       count = 0; // reset the counter
       tableGroupCollection.refresh();
       
      
       trxTable.dataProvider = tableGroupCollection;
       
       if(isFirst){
        trxTable.expandAll();
        isFirst = false;
       }
       else
        IHierarchicalCollectionView(trxTable.dataProvider).openNodes = openNodes;
        
       trxTable.validateNow();
      }
      
      break;
     case 1:       
      
      if (svcTable.dataProvider is IHierarchicalCollectionView)
      {
       openNodes = IHierarchicalCollectionView(svcTable.dataProvider).openNodes;
       count = 0; // reset the counter
       tableGroupCollection.refresh();
       
       
       svcTable.dataProvider = tableGroupCollection;
       
       if(isFirst){
        svcTable.expandAll();
        isFirst = false;
       }
       else
        IHierarchicalCollectionView(svcTable.dataProvider).openNodes = openNodes;
       
       svcTable.validateNow();
      }
      break;
     case 2:tableGroupCollection.refresh();brTable.dataProvider = tableGroupCollection;brTable.validateNow();break;
     case 3:tableGroupCollection.refresh();methTable.dataProvider = tableGroupCollection;methTable.validateNow();break;
    }
    
   }
   

   protected function navigatorcontent1_showHandler(event:FlexEvent):void
   {
    init();
    
          trace("업무상세:업무별트랜잭션현황  viewed");
   }
   
   
   private function reRemotingHandler(e:Event):void{
    sendMessage();
          trace("업무상세:업무별트랜잭션현황  polling");
   }
   
   protected function navigatorcontent1_hideHandler(event:FlexEvent):void
   {
    timer.stop();
          trace("업무상세:업무별트랜잭션현황  stop");
   }


   
   private function sendMessage():void{

    var rmEvent:NHMessageEvent = new NHMessageEvent(messageArry[currentIndex]);
    this.dispatchEvent(rmEvent);
   }


   protected function vs_changeHandler(event:IndexChangedEvent):void
   {
    //hierarchy, scroll 초기화
    vPos = 0;
    count = 0;
    openNodes= null;
    isFirst = true;
    
    trace("업무상세:카테고리 변경");
    tableGroupCollection.source = null;
    tableGroupCollection.grouping = null;
    tableGroupCollection.refresh();
    init();
   }
   
   private function init():void{
    timer.stop();
    sendMessage();
    timer.start();
   }
   protected function trxTable_scrollHandler(event:ScrollEvent):void
   {
    vPos = event.currentTarget.verticalScrollPosition;
   }
   private function returnPVPosition(e:CollectionEvent):void{
    
    if(e.kind == CollectionEventKind.RESET){
     switch(currentIndex){
      case 0:
       
       trxTable.verticalScrollPosition = vPos;break;
      case 1:
       svcTable.verticalScrollPosition = vPos;break;
      case 2:
       brTable.verticalScrollPosition = vPos;break;
      case 3:
       methTable.verticalScrollPosition = vPos;break;
     }
     
    }
    
   }
   private function grpOnjFunc(value:String):Object{
    return {uid:value + count++};
   }

  ]]>
 </fx:Script>
 
  <fx:Declarations>
   <mx:NumberFormatter useThousandsSeparator="true" id="nFormatter"/>
  </fx:Declarations>
 
 
 <mx:ViewStack id="vs" left="5" top="5" right="5" bottom="5" change="vs_changeHandler(event)">
  <s:NavigatorContent width="100%" height="100%">
   
  <mx:AdvancedDataGrid   id="trxTable" dataProvider="{tableGroupCollection}" designViewDataType="tree" width="98%" height="97%" sortExpertMode="true" color="0x000000" 
       scroll="trxTable_scrollHandler(event)">
   <mx:groupedColumns>
    <mx:AdvancedDataGridColumn headerText="업무" dataField="untBusName"  width="300" />
    <mx:AdvancedDataGridColumn headerText="처리건수" dataField="curTrx"  formatter="{nFormatter}" textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="응답시간" dataField="resTime"  formatter="{nFormatter}" textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="누적건수" dataField="accNormal" formatter="{nFormatter}"  textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="누적에러" dataField="accError" formatter="{nFormatter}"  textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="비율" dataField="accPercent" formatter="{nFormatter}"  textAlign="right"/>
    
   </mx:groupedColumns>
  </mx:AdvancedDataGrid>
  </s:NavigatorContent>
  <s:NavigatorContent width="100%" height="100%">
  <mx:AdvancedDataGrid dataProvider="{tableGroupCollection}"  id="svcTable" designViewDataType="tree" width="98%" height="97%" sortExpertMode="true" color="0x000000"
        scroll="trxTable_scrollHandler(event)">
   <mx:groupedColumns>
    <mx:AdvancedDataGridColumn headerText="주요서비스" dataField="svcId"  width="300"  />
    <mx:AdvancedDataGridColumn headerText="처리건수" dataField="curTrx"  formatter="{nFormatter}" textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="응답시간" dataField="resTime"  formatter="{nFormatter}" textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="누적건수" dataField="accNormal"  formatter="{nFormatter}" textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="누적에러" dataField="accError"  formatter="{nFormatter}" textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="비율" dataField="accPercent"  formatter="{nFormatter}" textAlign="right"/>
    
   </mx:groupedColumns>
  </mx:AdvancedDataGrid>
  </s:NavigatorContent>
  <s:NavigatorContent width="100%" height="100%">
  <mx:AdvancedDataGrid  dataProvider="{tableGroupCollection}" id="brTable" designViewDataType="tree" width="98%" height="97%" sortExpertMode="true" color="0x000000"
         scroll="trxTable_scrollHandler(event)">
   <mx:columns>
    <mx:AdvancedDataGridColumn headerText="지점" dataField="brName"   width="300"  />
    <mx:AdvancedDataGridColumn headerText="처리건수" dataField="curTrx"  formatter="{nFormatter}"  textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="응답시간" dataField="resTime"  formatter="{nFormatter}"  textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="누적건수" dataField="accNormal"  formatter="{nFormatter}"  textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="누적에러" dataField="accError"  formatter="{nFormatter}"  textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="비율" dataField="accPercent"  formatter="{nFormatter}"  textAlign="right"/>
    
   </mx:columns>
  </mx:AdvancedDataGrid>
  </s:NavigatorContent>
  <s:NavigatorContent width="100%" height="100%">
  <mx:AdvancedDataGrid dataProvider="{tableGroupCollection}" id="methTable" designViewDataType="tree" width="98%" height="97%" sortExpertMode="true" color="0x000000"
        scroll="trxTable_scrollHandler(event)">
   <mx:columns>
    <mx:AdvancedDataGridColumn headerText="매체" dataField="methNm" width="300"  />
    <mx:AdvancedDataGridColumn headerText="처리건수" dataField="curTrx"  formatter="{nFormatter}"  textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="응답시간" dataField="resTime"  formatter="{nFormatter}"  textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="누적건수" dataField="accNormal"  formatter="{nFormatter}"  textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="누적에러" dataField="accError"  formatter="{nFormatter}"  textAlign="right"/>
    <mx:AdvancedDataGridColumn headerText="비율" dataField="accPercent"  formatter="{nFormatter}"  textAlign="right"/>
    
   </mx:columns>
  </mx:AdvancedDataGrid>
  </s:NavigatorContent>
 </mx:ViewStack>

 
</s:BorderContainer>


etc...

<mx:AdvancedDataGrid id="adDataGrid"  updateComplete="openGridItem
()"    itemOpen="getSubNodesUnderNode(event)"  width="100%"
height="100%" >
       <mx:dataProvider>
            <mx:HierarchicalData source="{programGridTree}"
                childrenField="childObjects"/>
        </mx:dataProvider>
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="title"
headerText="Title" width="400" />
         </mx:columns>
    </mx:AdvancedDataGrid>



                        public function openGridItem():void
                        {
                                        adDataGrid.expandItem(adDataGrid.selectedItem,true);
                        }



2010/08/17 - [Componet Directory/DataGrid/Advanced/List] - DataGrid 리프레시 refresh() - HowTo

Comments