1) 数据是分级的,上面的是下面的总和,总和的数据粗体,负数用括号,千分位分隔符为“,”
2) 负数用红色,『Deductions』零也用红色,其他的零也用黑色
最初的做法:
第一级数据用Renderer.RevenueRenderer,其他的数据用Renderer.RevenueSubRenderer渲染
var p:Array=[];
for(vari:int=0;i<netRevenue.columnCount;i++){
var provider:AdvancedDataGridRendererProvider=newAdvancedDataGridRendererProvider();
provider.columnIndex=i;
provider.depth=1;
provider.columnSpan=1;
if(i>0){
provider.renderer=new ClassFactory(Renderer.RevenueRenderer);
}
p.push(provider);
}
netRevenue.rendererProviders=p;
这种方法比较麻烦,可以在原来的数据中加一些辅助信息,比如level:’1’,level:’2’…,我们就可以之用一个renderer解决问题。
if(level=='1'){ //第一级别粗体,level为辅助信息
setStyle("fontWeight","bold");
}else{
setStyle("fontWeight","normal");
var df:String=AdvancedDataGridListData(listData).dataField;
var val:Number=value[df];
if (val<0){
setStyle("color","0xFF0000");//负数红色
}else{
if(value['desc']=="deduction" &&val==0){
// deduction下的数据为红色,desc为辅助信息
setStyle("color","0xFF0000");
}else{
setStyle("color","0x000000");//黑色
}
}
if(val<0){
var s:String=value[df].toString();
listData.label=formatNumber.format(value[df]);
//负数用括号,千分位分隔符为“,”
}
}
在flex,excel中对于%的问题,在数据中最好是小数的形式,flex的renderer中
formatNumber.format(val)formatNumber.format(val*100)+”%” (format:’percent’)
Excel中的DataFormat很强大的
"#,##0_);[Red](#,##0)%"
“#,##0_);[Red](#,##0);[Red]0”(desc:’deduction’)
“#,##0_);[Red](#,##0)%;[Red]0%”(format:’percent’)
public double getDouble1(Mapmap,String key){
if(!map.containsKey(key) ||map.get(key)==null) return 0.0;
if(map.get(key) instanceof BigDecimal ){
return((BigDecimal)map.get(key)).doubleValue();
}else if(map.get(key) instanceof Integer ){
return((Integer)map.get(key)).doubleValue();
}else if(map.get(key) instanceof Double {
return((Double)map.get(key)).doubleValue(); } else{
return 0.0;
}
}
BigDecimal(Java)-> String(Flex)
特别注意科学计数法E parseFloat('4.854367e+07')
Flex: Number/int parseFloat/parseInt
varformatNumber:NumberFormatter = new NumberFormatter; formatNumber.useThousandsSeparator= true; formatNumber.precision = 0; formatNumber.useNegativeSign=false; formatNumber.rounding="nearest"; trace(formatNumber.format("-12.03%")); //(12) trace(formatNumber.format("-12.05asdf")); //(12)
formatNumber.format(parseFloat('4.854367e+07'))
DecimalFormat
##.## 00.00 #.##% ,###.### 0.0;'@'-#.0
0 - 如果对应位置上没有数字,则用零代替
# - 如果对应位置上没有数字,则保持原样(不用补);如果最前、后为0,则保持为空。
正负数模板用分号(;)分割