分组时忽略大小写

时间:2013-04-22 14:33:17

标签: jqgrid

有没有办法告诉jqGrid在分组时忽略这个案例?我不想改变数据,因为有些是大写的,有些是小写的,有些是混合大小写。

我正在使用jqGrid 4.4.4

1 个答案:

答案 0 :(得分:3)

问题很好,但是......目前jqGrid中的分组实现只允许对精确值进行分组。我记得当一个人想要按月分组而不是确切的日期时的密切要求。

在对jqGrid的源代码进行一些分析后,我希望我找到非常简单且非常灵活的方式来进行更灵活的分组。我建议修改the line

if( typeof v !== "object" && grp.lastvalues[i] !== v ) {

if (typeof v !== "object" &&
        ($.isFunction(grp.isInTheSameGroup) ?
            !grp.isInTheSameGroup(grp.lastvalues[i], v) :
            grp.lastvalues[i] !== v)) {

在此之后,可以在isInTheSameGroup内定义groupingView函数:

grouping: true,
groupingView: {
    ...
    groupField: ["name"], // the column by which we group
    isInTheSameGroup: function (x, y) {
        return String(x).toLowerCase() === String(y).toLowerCase();
    }
}

The demo显示以下结果:

enter image description here

我在jqGrid 4.4.5的jquery.jqGrid.src.js的演示修改版本中使用过。 jqGrid 4.4.4的jquery.jqGrid.src.js版本的修改方式与here相同。

我稍后会将我的建议发布到trirand。我希望下一版本的jqGrid将包含该功能。

更新:按照承诺,我将the corresponding feature request发布到了trirand。

更新2 :我发布了the pull request,对jqGrid的分组模块进行了一些更改。 The demo演示了如何使用新功能。它使用2级分组并显示以下结果:

enter image description here

更新3 :我发送给trirand的The pull request现在合并到jqGrid的主代码中。因此,jqGrid的下一个版本(4.4.5之后)将支持isInTheSameGroup内的formatDisplayFieldgroupingView回调数组。如果你的情况看起来像

groupingView: {
    groupField: ['name'],
    formatDisplayField: [
        function (displayValue) { //, value, cm, index, grp) {
            return String(displayValue).toLowerCase();
        }
    ],
    groupColumnShow: [true],
    groupDataSorted: true,
    isInTheSameGroup: [
        function (x, y) {
            return String(x).toLowerCase() === String(y).toLowerCase();
        }
    ]
}

isInTheSameGroup[0]分组将使用回调formatDisplayField[0]groupField[0]。因为jqGrid支持多级分组,所以isInTheSameGrouformatDisplayField属性是回调函数的数组,而不仅仅是回调函数。

在分组列开始对 jqGrid排序数据进行分组。可以使用sorttype定义为函数来自定义第一步(请参阅the answer)。我不是在写你的答案时的步骤。可能使用sorttype: function (cellvalue) {return String(cellvalue).toLowerCase();}已经可以解决您的问题了。

然后将使用函数isInTheSameGroup[level]来比较上一行的分组列的值与当前行的对应值。将使用值调用函数isInTheSameGroup[level]。如果您的回调返回true,那么该行将与前一行分组。

回调formatDisplayField[level]允许自定义分组标题中显示的信息。在上面的示例中,我将数据转换为小写。