AdvancedDataGrid 和 excel的dataFormat



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,则保持为空。
正负数模板用分号(;)分割





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值