2007. 11. 12. 20:50
[Dev/Flex]
간단한 아이템 렌더러(Item Renderer)를 만들어보자!
데이터그리드를 이용하여 데이터를 출력할 때, 아이템 렌더러를 이용하면 자신의 의도대로 출력할 수 있어 참으로 유용합니다.
다음의 소스는 Money 라는 값을 출력하는데 이 것은 CurrencyFormatter를 이용하여 달러 표시로 출력하게 하여 보았습니다.
메인 App는 레퍼런스의 Datagrid에 예제를 약간 수정하여 사용하였습니다.
Label을 상속받아서 CurrencyFormatter를 하나 추가하여 출력할 값(data.money)를 통화(Currency)형태로 출력하게 해주었습니다.
※ data - data를 살펴보면 Datagrid의 해당 Row의 모든 데이터가 들어있는 것을 확인할 수 있습니다.
DatagridColumn 에 itemRenderer로 위에서 만든 myItemRenderer를 물려주었습니다. ItemRenderer는 IFactory 형태로 받아드리므로 new ClassFactory(CLASS) 이런 식으로 클래스를 변환하여 연결하였습니다.
잘 되나 봅시다.
데이터그리드를 이용하여 데이터를 출력할 때, 아이템 렌더러를 이용하면 자신의 의도대로 출력할 수 있어 참으로 유용합니다.
다음의 소스는 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>
...
...
<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 형태로 출력되고 있습니다.
즐플하세요!
'Dev > Flex' 카테고리의 다른 글
[FLEX] 왜 Sprite는 Canvas에 addChild 안되는 걸까? (7) | 2007.12.04 |
---|---|
[FLEX] Coloring the Background of Cells (20) | 2007.11.20 |
[FLEX] XML의 값을 Boolean 값으로 캐스팅하는 방법? (1) | 2007.11.16 |
[FLEX] Datagrid 에 Mouse Over 시에 나오는 색을 바꾸고 싶다면? (0) | 2007.11.09 |
[FLEX] Flex 3.0 베타에서 구현한 데이터그리드 멀티헤더 (datagrid multi-header) (7) | 2007.06.12 |