2013-04-22 115 views
1

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

我使用的jqGrid 4.4.4

回答

2

的问题是很好的,但是......目前实施的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)) { 

在此之后一个可以定义groupingViewisInTheSameGroup功能:

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

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

已更新:如所承诺的,我将the corresponding feature request转贴给了trirand。

已更新2:我发布了the pull request,jqGrid的分组模块发生了一些变化。 The demo演示如何使用新功能。它采用2级分组,并显示下列结果:

enter image description here

修订3The pull request我发送到trirand现在被合并到的jqGrid的主代码。因此,jqGrid的下一个版本(4.4.5之后)将支持groupingView内的回调数组isInTheSameGroupformatDisplayField。如果你的情况下,它看起来像

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]允许定制显示在分组标题中的信息。在上面的例子中,我将数据转换为小写。

+0

奥列格,非常感谢你的详细回应和功能要求。我不喜欢分发代码,因为它很难更新到更新的版本。因此,我通过添加另一个隐藏列来解决该问题,其中数据为大写,并按该列分组。 – 2013-04-22 17:53:12

+0

@JonasStawski:不客气!我了解你的解决方法和你的观点。不过,我认为这个问题很普遍。我之前建议过许多功能,现在是jqGrid的一部分,它可以帮助其他人。我希望Tony(trirand)能够实现我所建议的功能(无论它是按照我的建议还是其他方式实施都没关系)。 – Oleg 2013-04-22 18:45:42

+0

我同意。希望它能做到,而且我不需要将它分叉,我可以删除我的黑客 – 2013-04-22 19:56:53