如何在jqgrid中对数字列进行排序

Gia*_*oli 3 jqgrid

在我的jqGrid中,我有一个具有以下格式的列:'1.234,678'.我想对此列进行排序,我正在使用此代码:

{name:'ZMENG_SOR_VRKME', index:'ZMENG_SOR_VRKME', width:'5', align:'right', sorttype:'number' }

排序不起作用.我认为它不考虑.(点)数千,例如,如果我有21,000 - 991,000 - 1.188,000.结果是:991,000 - 21,000 - 1.188,000.

我怎么解决这个问题?

Ole*_*leg 8

如果我正确理解您的问题,您应该更改网格中填充的数据格式.您应该使用纯数字作为输入,并使用formatter: "number"在数字中包含千位分隔符.在我看来,这将是解决问题的最佳方式.您可以使用正确的语言文件grid.locale-XX.js,将使用千位分隔符对应的语言环境.或者您可以使用decimalSeparatorthousandsSeparatorformatoptions指定自定义的小数和千个分隔符.

或者,您可以提供unformatter(此处unformat描述的功能),将单元格中显示的文本转换为数字.我认为它应该有效.

另一种可能性是使用自定义排序.您需要定义sorttype为将返回数据的"规范化"版本的函数.在排序期间将使用"标准化"数据而不是原始数据.有关代码示例,请参阅答案答案.

更新: 免费的jqGrid提供了一些标准模板一样template: "integer",number: "number",template: "integerStr",number: "numberStr"等.因此可以使用

{name: "ZMENG_SOR_VRKME", width: 50, template: "numberStr" }
Run Code Online (Sandbox Code Playgroud)

这相当于使用

{name: "ZMENG_SOR_VRKME", width: 50,
    formatter: "number", align: "right", sorttype: "number",
    searchoptions: { sopt: ["eq", "ne", "lt", "le", "gt", "ge"] } }
Run Code Online (Sandbox Code Playgroud)