まずは、「動的に1000単位とかに切り替えられる仕組み」に挑戦。
labelFunctionで試してみる。
とはいえいきなりは難しいので、まずは1000単位にした金額フォーマットするlabelFunctionあたりから作成。
呼び出し側は
<formatters:VariableCurrencyFormatter id="formatter" unit="1000" />
<mx:DataGrid id="dg" dataProvider="{dp}">
<mx:columns>
<mx:DataGridColumn dataField="str1" />
<mx:DataGridColumn dataField="str2" />
<mx:DataGridColumn dataField="str3" />
<mx:DataGridColumn dataField="str4" />
<mx:DataGridColumn dataField="int1" labelFunction="{formatter.format}" textAlign="right"/>
</mx:columns>
</mx:DataGrid>
という感じで。
で、中で使ってるVariableCurrencyFormatterの、format()関数はこんな感じ。
public function format(item:Object, column:DataGridColumn):String
{
var dat:Object = item;
if (column != null && item.hasOwnProperty(column.dataField))
{
dat = item[column.dataField];
}
var curFormatter:CurrencyFormatter = new CurrencyFormatter();
return curFormatter.format(Number(dat) / unit);
}
さすがにこれは問題なく1000単位での表示になる。
問題は、このunitプロパティを変えてあげた時に、動的に表示が変わってほしいっていうこと。
変えるたびにdp.refresh()とかやってあげれば、DataGrid側にPropertyChangeイベントが飛んで実現できそうだけど、さすがにそれはスマートじゃないような。。。
やっぱりせっかく用意されているデータバインディングでうまくやりたいよね。