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/