对Ext可编辑的数字框增加格式化功能

定义Ext grid的列头时,将其定义为:editor:new Ext.form.NumberField 如下,并且增加,renderer:renderVal ,便可通过renderVal 函数实现格式化功能了

 var cm = [new Ext.grid.RowNumberer(),

      {header:id('worthtree.value2').value,width:180,dataIndex:'contrstValue',hidden:false,sortable:false,renderer:renderVal,editor:new Ext.form.NumberField({  
                fieldLabel:'小数',  
                decimalPrecision:6,                 //精确到小数点后2位(执行4舍5入)  
                allowDecimals:true,                //允许输入小数  
                nanText:'请输入有效数值',  
                allowNegative:true  
            })}


 

格式化函数,主要完成对百分比性质的数据转换成%形式,其他性质的数据转换成千分位形式。

这里判断是否是百分比性质是通过“nodeName ” 列的值中是否包括“率”字,不同的情况,可采用不同的方式。

     function renderVal(val,cellmeta, record, rowIndex, columnIndex, store){
     		var showVal = val;
     		if(record.data.nodeName.indexOf("率") > 0) {
     			showVal = transPerCent(showVal) + "%";
     		} else {
     			showVal = transStr(val);
     		}
	     	if(record.data.canEdit == true ) {
	  			return '<span style="color:blue;">'+showVal+'</span>' ;
	  		} else {
	  			return '<span style="color:gray;">'+showVal+'</span>' ;
	  		}
     }
     //安全的乘法
     function accMul(arg1,arg2){
		  var m=0,s1=arg1.toString(),s2=arg2.toString();
		  try{m+=s1.split(".")[1].length}catch(e){}
		  try{m+=s2.split(".")[1].length}catch(e){}
		  return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
	}
     
     function transPerCent(str){
     	str += "";
     	return accMul(Number(str), 100);
     }
     //转换为千分位###,###.00 
     function transStr(str){
     	str += "";
		if(str.indexOf(".") < 0) str = str + ".00";
		var begin = str.substring(0,str.indexOf("."));
		var after = str.substring(str.indexOf("."),str.length);
		 
		var l = begin.length/3;
		var str2 = "";
		if(l>1){
			  for(var i = 0; i < l; l = begin.length/3){
			   	str2 = "," + begin.substring(begin.length-3,begin.length) + str2;
			   	begin = begin.substring(0,begin.length-3);
			  }
			  if(after.length < 3){
			    str2 = begin + str2 + after + "0";
			  }else{
			    str2 = begin + str2 + after
			  }
			  str2 = str2.substring(1);
		}else{
			  if(after.length < 3){
			  	str2 = str + "0";
			  }else{
			  	str2 = str;
			  }
		 }
		 return str2;
	}


 

 注:accMul 方法是摘抄自网页,测试过是正确的

你可能感兴趣的:(对Ext可编辑的数字框增加格式化功能)