Enterprise APP
Advanced DataGrid Expand & Collapse... 본문
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
'Componet Directory > DataGrid/Advanced/List' 카테고리의 다른 글
특정 Row 비활성화시키기 (0) | 2010.10.03 |
---|---|
ItemRenderer 메모리 이슈 (0) | 2010.09.20 |
DataGrid에 라디오radio/체크박스checkbox의 selection 연동 (0) | 2010.08.19 |
DataGrid 스크롤 위치 고정하기 (0) | 2010.08.17 |
AdvancedDataGrid에서 그룹별 summary 지정하기 (0) | 2010.08.17 |