定义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 方法是摘抄自网页,测试过是正确的