【问题标题】:jqGrid - sorting numbers and textjqGrid - 排序数字和文本
【发布时间】:2013-12-28 17:09:01
【问题描述】:

使用 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

当我单击该列标题时,我可以在网格排序中看到数据,但是两个显示都没有在控制台日志中放置任何内容。当单击列标题对其进行排序时,它不应该触发并这样做,还是我错过了什么?

谢谢!

【问题讨论】:

    标签: jquery sorting text jqgrid integer


    【解决方案1】:

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

    【讨论】:

    • @oleg..能否请您对此提出建议..当您有时间..我真的很担心我对 mvc 的处理方式。 stackoverflow.com/questions/20514446/…
    • @oleg - 我查看了您的示例,但在尝试使其正常工作时遇到了问题。我不相信它会触发sorttype 函数。我已经编辑了问题以显示我的尝试。
    • @steve_o:您没有发布创建网格的 JavaScript 代码。代码的某些部分可能非常重要。你写了“我似乎无法让它着火。”请务必了解sorttype 仅在您使用客户端排序 时使用。如果根本没有调用sorttype 函数,则意味着您可能使用了datatype: "json"datatype: "json" 而您没有设置loadonce: true。在这种情况下,jqGrid 只是将排序列名称和排序方向发送到服务器,服务器负责排序。所以你应该在你的服务器代码中实现排序。
    【解决方案2】:

    您可以在 colModel 中将 sorttype 设置为

    sorttype: 'number'
    

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2018-08-01
      • 1970-01-01
      • 2011-10-03
      • 2014-07-10
      • 1970-01-01
      相关资源
      最近更新 更多