2015-12-31 68 views
0

我使用jqgrid 4.6.0jqgrid - 排序列中断组

当我点击列标题来排序行时,初始分组会中断。 数据类型是JSON。

这是colModel:

 {name:'name',width:150,resizable:true,title:false,sortable:true, editable:true}, 
     {name:'value',width:80,resizable:true,title:true,sorttype:'number'}, 
     {name:'col_type',width:80,resizable:false,title:false, editable:false} 

而且分组设置和其他设置:

loadonce:true,toppager:true,hidegrid:false, 
grouping:true,gridview:true,rownumbers:false, 
groupingView: { 
    groupField : ['col_type'], 
    groupText: ['<b> {0} </b>'], 
    groupColumnShow : [false] 
} 

很显然,我希望行的排序是组里, 另一个问题,是否有任何一点将colModel中的列设置为hidden: true?由于它已在groupingView中定义。

+1

您可以验证[免费jqGrid](https://github.com/free-jqgrid/jqGrid)4.12.0中是否存在相同的问题?您只需要将临时URL改为jqGrid文件为[wiki文章]中描述的URL(https://github.com/free-jqgrid/jqGrid/wiki/Access-free-jqGrid-from-different-CDNs)。免费的jqGrid是自一年以来我开发的jqGrid的分支。它与jqGrid 4.6兼容,但包含许多错误修复和增强功能。 – Oleg

+0

我测试过了,它确实工作正常。所以我想这是jqGrid 4.6.0中的一个错误? 至于可行性,它确实有效,但看起来有些不同。标题行的字体大小要小得多,并且行的大小也是如此。也许我应该稍微微调一下css。编辑:我会说在一般较小的字体大小。 – user3599803

+0

这给我带来了另一个问题 - 虽然排序工作正常,最初的组排序,在排序时破坏。 – user3599803

回答

1

我在评论中已经解释过,服务器返回的数据必须按照groupingView.groupField(您的案例中的字段col_type)进行排序。另一方面,您有数据

var data = {"rows":[ 
     {"col_type":"group1",...}, 
     {"col_type":"group1",...}, 
     {"col_type":"aaa",...}, 
     {"col_type":"group3",...}, 
     {"col_type":"group3",...}, 
     {"col_type":"group4",...}, 
     {"col_type":"group4",...} 
    ]}; 

其中"aaa"组的顺序错误。 jqGrid可能会保留您的自定义订单,但您必须通知它。例如,您可以使用定义为功能的sorttype或使用sortfunc回调函数。例如,您可以将输入数据扩展到以下

var data = {"rows":[ 
     {"col_type":"group1","col_type_order":1,...}, 
     {"col_type":"group1","col_type_order":1,...}, 
     {"col_type":"aaa","col_type_order":2,...}, 
     {"col_type":"group3","col_type_order":3,...}, 
     {"col_type":"group3","col_type_order":3,...}, 
     {"col_type":"group4","col_type_order":4,...}, 
     {"col_type":"group4","col_type_order":4,...} 
    ]}; 

,并使用col_type

{ 
    name: 'col_type', width:80, resizable:false, title:false, 
    sorttype: function (value, item) { 
     return item.col_type_order; 
    } 
} 

更新:看到修改后的演示https://jsfiddle.net/uz7Ltbjk/7/。如果您使用旧的jqGrid,并且从服务器加载数据并结合loadonce: true,则必须添加隐藏列col_type_order。如果你使用免费的jqGrid,那么你可以使用additionalProperties。您可以使用simlest格式如下:

additionalProperties: ["col_type_order"] 

它通知的jqGrid阅读附加属性(字段)从源数据,并将保存在data参数本地数据内的信息。通过这种方式,您可以使用任何附加信息扩展本地项目,您可以在排序过程中稍后使用这些附加信息。顺便说一下,可以有任何类型的其他属性的值。例如,它可以是对象或数组。此功能可能对主/细节网格或子网格有所帮助。可以一次加载所有需要的信息,然后使用它。

+0

我明白了。这就是我的意思,我只想对组内的数据进行排序。当为分组列(col_type)定义sorttype回调函数时,是否意味着jqgrid会自动排序:[col_type callback function value],[用户选择的列]? 其次,有没有什么办法可以将数据分组而不用定义数据中的组?正如你所看到的我的专栏是隐藏的。我想我需要为col_type_order创建另一个隐藏列? – user3599803

+0

因为它发生在我身上,当数据类型为json时,jqgrid不会保存colModel中未定义的数据。 – user3599803

+0

我不明白sorttype功能,项目只是列数据(字符串),而不是一个对象... – user3599803