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