1

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

我正在使用 jqGrid 4.4.4

4

1 回答 1

3

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

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

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();
    }
}

该演示显示以下结果:

在此处输入图像描述

我在演示修改版中使用jquery.jqGrid.src.js了jqGrid 4.4.5。jquery.jqGrid.src.jsjqGrid 4.4.4的版本以相同的方式修改,您可以在此处找到。

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

更新:按照承诺,我向 trirand发布了相应的功能请求。

更新 2:我发布了拉取请求,对 jqGrid 的分组模块进行了更多更改。该演示演示了如何使用新功能。它使用 2 级分组并显示以下结果:

在此处输入图像描述

更新 3:我发送给 trirand的拉取请求现在合并到 jqGrid 的主代码中。isInTheSameGroup所以jqGrid 的下一个版本(4.4.5 之后)将formatDisplayField支持groupingView. 如果你的情况看起来像

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 支持多级分组,isInTheSameGrou并且formatDisplayField属性是回调函数的数组,而不仅仅是回调函数。

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

然后该函数isInTheSameGroup[level]将用于将前一行的分组列的值与当前行的相应值进行比较。该函数isInTheSameGroup[level]将使用这些值调用。如果您的回调返回true,则该行将与前一个分组。

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

于 2013-04-22T17:07:57.420 回答