2007. 11. 12. 20:50
간단한 아이템 렌더러(Item Renderer)를 만들어보자!

데이터그리드를 이용하여 데이터를 출력할 때, 아이템 렌더러를 이용하면 자신의 의도대로 출력할 수 있어 참으로 유용합니다.
다음의 소스는 Money 라는 값을 출력하는데 이 것은 CurrencyFormatter를 이용하여 달러 표시로 출력하게 하여 보았습니다.

메인 App는 레퍼런스의 Datagrid에 예제를 약간 수정하여 사용하였습니다.

myItemRenderer.as

package
{
  import mx.controls.Label;
  import mx.formatters.CurrencyFormatter;

  public class myItemRenderer extends Label
  {
    private var formatter:CurrencyFormatter;

    public function myItemRenderer()
    {
      super();
      formatter = new CurrencyFormatter(); // CurrencyFormatter
    }

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
      super.updateDisplayList(unscaledWidth, unscaledHeight);

      this.text = formatter.format(data.money); // 출력될 값(data.money)에 CurrencyFormatter를 적용
    }

  }
}


Label을 상속받아서  CurrencyFormatter를 하나 추가하여 출력할 값(data.money)를 통화(Currency)형태로 출력하게 해주었습니다.
 ※ data - data를 살펴보면 Datagrid의 해당 Row의 모든 데이터가 들어있는 것을 확인할 수 있습니다.

MXML...
...
<employee>
<name>Christina Coenraets</name>
<phone>555-219-2270</phone>
<email>ccoenraets@fictitious.com</email>
<money>10000</money>
<active>true</active>
</employee>

...

<mx:DataGrid
id="dg" width="100%" height="100%" rowCount="5" dataProvider="{employees}">
  <mx:columns>
    <mx:DataGridColumn dataField="name" headerText="Name"/>
    <mx:DataGridColumn dataField="phone" headerText="Phone"/>
    <mx:DataGridColumn dataField="email" headerText="Email"/>
    <mx:DataGridColumn dataField="money" headerText="Money" itemRenderer="{ new ClassFactory(myItemRenderer) }"/>
  </mx:columns>
</mx:DataGrid>

...

DatagridColumn 에 itemRenderer로 위에서 만든 myItemRenderer를 물려주었습니다. ItemRenderer는 IFactory 형태로 받아드리므로 new ClassFactory(CLASS) 이런 식으로 클래스를 변환하여 연결하였습니다.


잘 되나 봅시다.

Money가 $10,000 형태로 출력되고 있습니다.

즐플하세요!