jqGrid - 排序数字和文本

时间:2013-12-10 22:55:23

标签: jquery sorting text jqgrid integer

使用jqGrid 4.5.2。在我的数据集中,我有一个列可以包含整数或文本。我将sorttype设置为text

返回的数据将在网格中混合,并且可以包含字符或数字。它可能只包含字母,仅包含数字或两者的混合。如果我点击列按降序对其进行排序,则会显示:

400
350
300
200
1100
1020
1010
1000
100

数字可以变化,字母也可以变化。有没有办法定义一个自定义sorttype函数来正确排序数字,如数字和字符串,如同一列中的字符串?如果是这样,怎么样?

我找到了使用CASE类型语句的示例,但由于不知道单元格的内容,我不能这样做。非常感谢任何想法。

编辑

基于@ Oleg的回答,我尝试了几种不同的方法来实现sorttype作为函数。但是,我似乎无法解雇它。它将对数据进行排序,但似乎将所有内容排序为字符串。我在代码中有一些console.log语句,它们应该转储出任何值,但是没有显示。

首先尝试将函数放在colModel

{name:"MySource",
index:"MySource",
width:40,
align:"left",
sorttype: function (cell, rowObject) {
    if (typeof cell === "string" && /^test(\d) + $/i.test(cell)) {
        console.log("inside if custom sort - cell = " + cell );
        return parseInt(cell);
        }
    else {
        console.log("else - cell = " + cell );
        return cell;
        }
    },

第二次尝试是在查看您在类似问题上创建函数&的另一个代码示例之后。然后从sorttype调用该函数。

以下是colModel

{name:"MySource",
index:"MySource",
width:40,
align:"left",
sorttype: function (cell) {
        return myCustSort (cell) ;
        }
    }
}   

myCustSort函数:

function myCustSort (myCell) {
    if (typeof myCell === "string" && /^test(\d) + $/i.test(myCell)) {
        console.log("inside if custom sort - cell = " + myCell );
        return parseInt( myCell);
        }
    else {
        console.log("else - cell = " + myCell );
        return myCell;
        }
} // end myCustSort

当我点击该列标题时,我可以看到网格排序中的数据,但是这两个显示都没有在控制台日志中放置任何内容。不应该火和它单击列标题进行排序,或者我遗漏了什么?

谢谢!

2 个答案:

答案 0 :(得分:5)

您可以将 colModel 中的 sorttype 设置为

sorttype: 'number'

答案 1 :(得分:2)

您可以使用sorttype定义为函数。在函数内部,您可以使用parseInt来测试值是否为整数。在整数值的情况下,该函数可以返回整数值。在非整数的情况下,该函数可以返回原始字符串值。有关代码示例,请参阅the answer