jqGrid中列的百分比排序

jqGrid中列的百分比排序,jqgrid,Jqgrid,在我的jqGrid中包含以下内容: colModel.push({name:'pcc2008-2007',index:'pcc0807',宽度:100,对齐:“Right”, sorttype:“float”,格式化程序:“number”,可调整大小:false, 格式化程序:函数(cellvalue、options、rowObject){ 返回百分比变化(rowObject['vol08'],rowObject['vol07'],4); } }); 格式化程序工作得很好,在最后返回一个值(带

在我的jqGrid中包含以下内容:

colModel.push({name:'pcc2008-2007',index:'pcc0807',宽度:100,对齐:“Right”,
sorttype:“float”,格式化程序:“number”,可调整大小:false,
格式化程序:函数(cellvalue、options、rowObject){
返回百分比变化(rowObject['vol08'],rowObject['vol07'],4);
}
});
格式化程序工作得很好,在最后返回一个值(带前缀%),但当我点击网格上的列标题时,结果并没有排序

我添加了一个“unformatter”函数,它只是用一个空的“%”来替换它,看看它是否产生了正确的排序,但同样地,排序根本没有正确实现

谁能解释一下我做错了什么

**编辑**

功能百分比变化(年底、开始日期、持续时间){
var p1=数学绝对值((年末-起始时刻)/数学绝对值(起始时刻)*100);
如果(p1==Number.POSITIVE | | p1==Number.NEGATIVE |{返回'0'}
if(isNaN(p1)){返回'0';}
else{return Math.round(p1*100)/100;}
}
**EDI2**

整个jqGrid在此调用:

$(“#列表2”).jqGrid({
datastr:formattedBrandData,
数据类型:“jsonstring”,
colModel:colModel,
高度:“自动”,
宽度:1000,
有一次:是的,
可排序:是的,
gridview:没错,
shrinkToFit:错,
viewrecords:是的,
行数:100,
gridComplete:函数(索引、colindex、排序器){
var aaa=$(“#列表2”).jqGrid('getRowData');
formattedBrandData=aaa;
图纸();
var rowIDs=jQuery(“#list2”).getDataIDs();
对于(变量i=0;i
我认为你最好使用

formatter:'currency',formattoptions:{suffix:'},sorttype:'currency'
见:

更新:您发布的代码中存在一些问题

第一个是jqGrid调用的
gridComplete
回调。jqGrid从不使用附加参数调用
gridComplete
,因此回调的
index
colindex
sortorder
参数将始终是
未定义的
。您应该删除这些参数

第二个问题是设计问题。您可以将数据类型:“jsonstring”与提供数据的
datastr:formattedBrandData
一起使用。数据将被读取一次,并且数据将保存在内部
data
数组中,其属性与
colModel
name
属性相同。因此,在
formattedBrandData
array中填充
'pcc2008-2007'
属性将更有效、更容易。您将计算值一次,并仅使用计算结果的
浮点值。稍后,您可以直接使用预定义的
货币
格式化程序(请参见上面的答案),仅在浮点值末尾添加
%

如果您使用某些本地数据类型(包括
数据类型:“jsonstring”
),则永远不要使用
索引
其他作为
名称
。最好从
colModel
中删除任何
索引
定义,以防它将用于
name
属性中的值。支持
name
index
的不同值,并且只有在
datatype:“json”
datatype:“xml”
中服务器代码负责数据排序的情况下才有帮助

您应该尽可能减少
gridComplete
loadComplete
中网格的更改次数(或HTML页面上数据的任何其他更改)。如果一个元素发生一次更改,web浏览器必须重新计算页面上所有现有元素的位置。因此,更改页面上的元素可能代价高昂。另一方面,使用
gridview:true
以及格式化程序、
rowattr
callback(请参阅)或
cellatr
可以在网格的HTML片段放到页面上之前对其进行修改。以您获得最佳性能的方式。请参阅相应的代码示例,其中演示了
rowattr
回调

最后一句话是ab