有没有办法告诉jqGrid在分组时忽略这个案例?我不想改变数据,因为有些是大写的,有些是小写的,有些是混合大小写。
我正在使用jqGrid 4.4.4
答案 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显示以下结果:
我在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级分组并显示以下结果:
更新3 :我发送给trirand的The pull request现在合并到jqGrid的主代码中。因此,jqGrid的下一个版本(4.4.5之后)将支持isInTheSameGroup
内的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
定义为函数来自定义第一步(请参阅the answer)。我不是在写你的答案时的步骤。可能使用sorttype: function (cellvalue) {return String(cellvalue).toLowerCase();}
已经可以解决您的问题了。
然后将使用函数isInTheSameGroup[level]
来比较上一行的分组列的值与当前行的对应值。将使用值调用函数isInTheSameGroup[level]
。如果您的回调返回true
,那么该行将与前一行分组。
回调formatDisplayField[level]
允许自定义分组标题中显示的信息。在上面的示例中,我将数据转换为小写。