避免使用多组对 JQGrid 中的行进行客户端排序

Posted

技术标签:

【中文标题】避免使用多组对 JQGrid 中的行进行客户端排序【英文标题】:Avoid client-side sorting of rows in JQGrid with Multi Grouping 【发布时间】:2012-09-25 07:13:41 【问题描述】:

我注意到,一旦通过 ajax getJSon() 检索到值列表,JQGrid 中的多分组会引发行排序以内联方式重新排列。 有时,重新排序会将相同元素的组拆分为多个组,这是应该的。

我想解决方案是避免客户端重新排序 JQGrid 行,目的是明确地重用 JSON 中给出的相同顺序而无需更改 --- 正如服务器返回的那样。

我正在使用以下配置:

jq("#myGrid").jqGrid(
  datatype: 'local',
  data: myvar.detail,  // a well formatted json locally stored
  colNames: [ ....],
  colModel: [
    name:'nome_attr',index:'nome_attr', sorttype: function () return 1;, editable:true, editrules:required:true, editoptions:size:27, align:'center',
    name:'desc_attr', index:'desc_attr', sorttype: function () return 1;, editable:true, editrules:required:false, edittype: "textarea",editoptions:rows:5, cols:25, hidden:true,
    name:'valore',index:'valore', sorttype: function () return 1;,editable:true, editrules:required:false, editoptions:size:30, width:120,
     ....
          ],
   loadonce: false,     // to dis-able sorting on client side
   sortable: false,     
   grouping:true,
   groupingView : 
         groupField : ['nome_attr', 'valore'],
         groupColumnShow: [false,false],
         groupText : ['0'],
         groupCollapse: true,
         groupDataSorted: false, 
         groupSorted: false, 
         groupOrder: false
        
  );

注意 (1) 我已经在使用变通方法来禁用排序类型

 sorttype: function () return 1;

如here 所述,"#myGrid" 是一个子网格,其中datatype: local 表示先前已在容器网格中检索到行。

有人知道colModel 属性和groupingView 参数的配置是什么,以避免在多分组的情况下进行内联重新排序吗?

提前致谢,

米歇尔

【问题讨论】:

【参考方案1】:

修复自动排序的一种解决方法是允许客户端工作以重新生成相同的值列表(重新创建相同的顺序)。

首先,准备一个 JScript 函数,强制为每个分组列设置正确的顺序值:

   /** 
    * Sort type in subgrid's gropued rows
    */
   function sortGroup(cellValus, rowData, ty)      
       if(ty==='attribute_1')
        return rowData.attr1_order;
       else if(ty==='attribute_2')
        return rowData.attr2_order;
    

其次,在colModel中注入所需的订单值。

三、在每个分组的列中触发sorttype里面的上一个函数,使用列类型知道订单属于哪个组:

  colModel: [
     name:'nome_attr',index:'nome_attr', sorttype: function (cellValus, rowData) return sortGroup(cellValus, rowData, 'attribute_1'), editable:true, editrules:required:true, editoptions:size:27, align:'center',
     name:'desc_attr', index:'desc_attr', editable:true, editrules:required:false, edittype: "textarea",editoptions:rows:5, cols:25, hidden:true,
     name:'valore',index:'valore', sorttype: function (cellValus, rowData) return sortGroup(cellValus, rowData, 'attribute_2'),editable:true, editrules:required:false, editoptions:size:30, width:120,
      .....
     name:'attr1_order',index:'attr1_order', editable:false, hidden:true,
     name:'attr2_order',index:'attr2_order', editable:false, hidden:true
     ]

【讨论】:

以上是关于避免使用多组对 JQGrid 中的行进行客户端排序的主要内容,如果未能解决你的问题,请参考以下文章

jqgrid 上移下移单元格

jqgrid 禁用默认客户端排序并手动处理

根据第二个数组对 NSManagedObjects 数组进行排序

Spark:按组对记录进行排序?

jqGrid排序的两种实现方式:

使用来自另一个 DataFrame 的组对一个 DataFrame 进行 T 测试