Componet Directory/DataGrid/Advanced/List
DataGrid 리프레시 refresh() - HowTo
로드스타
2010. 8. 17. 10:55
-기본적인 DataGrid의 경우 ArrayCollection(AC차원에서 대치 말고)의 source인 Array 값을 치환해주는 것 만으로 가능.
-AdvancedDataGrid 의 경우 Hierarchy 타입의 데이터일 경우 노드에 대한 현상유지도 필요한데 특히 Summary 일 경우 Grouping의 개별 uid을 부여하고 이를 refresh하기 전 해당 노드의 상태 값을 저장 후 refresh 후 다시 불러오는 형태로 상태 유지.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
<![CDATA[
import mx.collections.IHierarchicalCollectionView;
protected function button1_clickHandler(event:MouseEvent):void
{
gc.refresh();
adg.dataProvider = gc;
}
protected function button2_clickHandler(event:MouseEvent):void
{
// add summaries and re-group
if (adg.dataProvider is IHierarchicalCollectionView)
{
var openNodes:Object = IHierarchicalCollectionView(adg.dataProvider).openNodes;
gf.summaries = summ;
count = 0; // reset the counter
gc.refresh();
adg.dataProvider = gc;
adg.validateNow();
IHierarchicalCollectionView(adg.dataProvider).openNodes = openNodes;
}
}
// counter to maintain the uid
private var count:int = 0;
private function grpObjFunc(value:String):Object
{
// we need to assign the same uid for same grouped Objects
// use count or value + count
return {uid:value + count++};
}
]]>
</mx:Script>
<!-- Source Collection -->
<mx:ArrayCollection id="arr">
<mx:Object name="A" qty="5" cost="100" />
<mx:Object name="A" qty="10" cost="200" />
<mx:Object name="B" qty="4" cost="200" />
<mx:Object name="C" qty="3" cost="300" />
<mx:Object name="C" qty="5" cost="350" />
<mx:Object name="D" qty="2" cost="400" />
<mx:Object name="E" qty="1" cost="500" />
</mx:ArrayCollection>
<!-- Grouping Collection taking source as the ArrayCollection defined above-->
<mx:GroupingCollection id="gc" source="{arr}">
<mx:Grouping groupingObjectFunction="grpObjFunc" >
<mx:fields>
<mx:GroupingField id="gf" name="name" />
</mx:fields>
</mx:Grouping>
</mx:GroupingCollection>
<!-- Array of Summaries, to be assigned when summaries are needed -->
<mx:Array id="summ">
<mx:SummaryRow>
<mx:fields>
<mx:SummaryField dataField="cost" operation="SUM" />
</mx:fields>
</mx:SummaryRow>
</mx:Array>
<mx:AdvancedDataGrid id="adg" dataProvider="{arr}" height="300">
<mx:columns>
<mx:AdvancedDataGridColumn dataField="name" />
<mx:AdvancedDataGridColumn dataField="qty" />
<mx:AdvancedDataGridColumn dataField="cost" />
</mx:columns>
</mx:AdvancedDataGrid>
<mx:Button label="Group Data" click="button1_clickHandler(event)" />
<mx:Button label="Add Summary" click="button2_clickHandler(event)" />
</mx:Application>
http://techrays.wordpress.com/2008/11/19/preserving-the-open-nodes-in-advanceddatagrid-after-re-grouping/