自定义sorttype函数在jqGrid中无法正常工作

时间:2013-02-05 06:58:16

标签: jquery sorting jqgrid

我的jqGrid包含一个特殊列,其值由另一个值生成,如“持续时间跨度”列,其实际值以秒为单位,如3690秒,我应该将其转换为格式化字符串'Hour:Minute:Second',in这是因为它是'1:1:30'。现在,我希望它在排序方面很有效,所以我编写了一个自定义函数来处理这个问题:

1,以下代码片段是列定义:

{
    name : 'time',
    index : 'time',
    align: 'center',
    width :  '12%',
    sorttype : sortTimeFuc
} 

2,以下代码片段是sort函数:

var sortTimeFuc = (function(cell) {
    var a = cell.split(':');
    var value = parseInt(a[2]) + parseInt(a[1]) * 60 + parseInt(a[0]) * 3600;
    return value;
});

但它的工作原理不正确如下:

enter image description here

有人可以帮我吗?非常感谢。

2 个答案:

答案 0 :(得分:1)

在我看来,你犯了一些错误。首先,您应该删除函数上的括号。不需要的括号可以跟随函数的调用。我在代码中看到的第二个也是最重要的错误是没有第二个参数10的parseInt的使用。最后一个错误是width : '12%'的使用。 jqGrid不支持宽度内的'%'。除此之外,您只能使用width: 12并指定总网格的width或使用autowidth: true。因为选项shrinkToFit: true是默认选项,如果将根据列的jqGrid和width属性的总宽度来缩放列的宽度,这将定义列之间的比例。

因此生成的代码可以如下所示

{
    name: 'time',
    align: 'center',
    width: 12,
    sorttype: function (cell) {
        var a = cell.split(':');
        return parseInt(a[2], 10) + parseInt(a[1], 10) * 60 +
            parseInt(a[0], 10) * 3600;
    }
}

请参阅the answer作为自定义排序非常接近实施的示例。

答案 1 :(得分:0)

因为合并的时间字符串符合字符串的排序条件,所以只需将此列的sorttype设置为“text”即可。问题解决了。