使用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
当我点击该列标题时,我可以看到网格排序中的数据,但是这两个显示都没有在控制台日志中放置任何内容。不应该火和它单击列标题进行排序,或者我遗漏了什么?
谢谢!
答案 0 :(得分:5)
您可以将 colModel 中的 sorttype 设置为
sorttype: 'number'
答案 1 :(得分:2)
您可以使用sorttype
定义为函数。在函数内部,您可以使用parseInt
来测试值是否为整数。在整数值的情况下,该函数可以返回整数值。在非整数的情况下,该函数可以返回原始字符串值。有关代码示例,请参阅the answer。