【问题标题】:jqgrid - sorting column breaks groupsjqgrid - 对分列符组进行排序
【发布时间】:2016-04-05 14:47:39
【问题描述】:

我使用 jqgrid 4.6.0

当我单击列标题对行进行排序时,初始分组会中断。 数据类型为 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 中定义了。

【问题讨论】:

  • 能否验证free jqGrid 4.12.0是否存在同样的问题?您只需将 jqGrid 文件的 URL 临时更改为 the wiki article 中描述的 URL。 Free jqGrid 是我一年以来开发的 jqGrid 的分支。它与 jqGrid 4.6 兼容,但包含许多错误修复和增强功能。
  • 我测试过,它运行良好。所以我猜这是 jqGrid 4.6.0 中的一个错误?至于兼容性,它确实有效,但看起来有些不同。标题行字体大小要小得多,行大小也是如此。也许我应该稍微调整一下 css。编辑:我一般会说字体较小。
  • 这给我带来了另一个问题 - 虽然排序工作正常,但初始组顺序在排序时中断..
  • 似乎免费的 jqgrid 对组名进行了很好的排序,我不想发生这种情况。我想保留原始组顺序并仅对行进行排序。我使用的演示也没有对组名称进行排序,所以我只想在这里明确地表达这种行为:trirand.com/blog/jqgrid/jqgrid.html。在分组下 -> 隐藏分组列
  • 您应该准备演示(例如作为 jsfiddle),它会重现问题。你可以使用JSFiddle的echo service/echo/json/

标签: sorting jqgrid grouping break


【解决方案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。您可以使用的最简单的形式如下:

additionalProperties: ["col_type_order"]

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

【讨论】:

  • 我明白了。这就是我的意思,我只想对组内的数据进行排序。当您为分组列 (col_type) 定义 sorttype 回调函数时,这是否意味着 jqgrid 会自动排序: [col_type callback function value] , [column selected by user] ?其次,有没有什么方法可以在不定义数据组的情况下对数据进行分组?如您所见,我的专栏被隐藏了。而且我认为我需要为 col_type_order 创建另一个隐藏列?
  • 因为我碰巧jqgrid不会保存colModel中未定义的数据,当数据类型为json时。
  • 我看不懂sorttype函数,item只是列数据(字符串),不是对象……
  • @user3599803:对不起,我在给你写答案的时候很忙。现在我回来了,可以修复代码:jsfiddle.net/uz7Ltbjk/7
  • @user3599803:更多示例,演示了additionalProperties,您可以在下面找到:demo1demo2demo3demo4demo5。见the input data
猜你喜欢
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
相关资源
最近更新 更多