在展开和缩小时将子网格与网格分组

时间:2017-03-10 13:25:17

标签: javascript jquery jqgrid

我有一个jqgrid,其中我对第一列和第二列进行分组,这样如果n行具有相同的列值,那么它将合并(对于第一行使用rowspan,对于具有相同值的其他行使用display:none)。

此外我还有一个子网格。现在当我在网格中展开任何一行时,分组中的其他行都会向左移动。

这是我的分组功能:

attrSetting: function(rowId, val, rawObject, cm) {
   var attr = rawObject.attr[cm.name],result;
   if (attr.rowspan) {
       result = ' rowspan=' + '"' + attr.rowspan + '"';
   } else if (attr.display) {
       result = ' style="display:' + attr.display + '"';
   }
   return result;
} 

我已经编写了一些代码来处理这个问题,每次扩展子网格时行数增加1,每次子网格折叠时减少1,如下所示:

var rowspanValue = this.getElements("tbody>tr.ui-widget-content")[row_id - 1].getElement("[aria-describedby=idCommonGridTabledetailMainContainerPATHApp_Stream]").rowSpan;
    this.getElements("tbody>tr.ui-widget-content")[row_id - 1].getElement("[aria-describedby=idCommonGridTabledetailMainContainerPATHApp_Stream]").setAttributes({ rowspan: rowspanValue + 1 });
    this.getElements("tbody>tr.ui-widget-content")[row_id - 1].getElement("[aria-describedby=idCommonGridTabledetailMainContainerPATHApp_\\%CompletionAvg]").setAttributes({ rowspan: rowspanValue + 1 });
    this.getElements("tbody>tr.ui-widget-content")[row_id - 1].getElement("[aria-describedby=idCommonGridTabledetailMainContainerPATHApp_\\%WeightAvg]").setAttributes({ rowspan: rowspanValue + 1 });

但这不起作用,因为只有分组的第一行有rowspan,所以如果我扩展每个分组的第一行然后它工作正常,对于其他人问题继续。

有没有办法检测DOM中具有相同分组的所有行,并且每次都设置第一行的行跨度,或者以任何其他方式实现它。

请建议。

1 个答案:

答案 0 :(得分:0)

我已将格式化程序中的自定义属性设置为我想要分组的列,这就是我修改代码的方式:

    cellattr: function(rowId, val, rawObject, cm) {
            return pathProjectModel.attrSetting(rowId, val, rawObject, cm) + 'attr-stream =' + val;
    } 



 subGridRowExpanded: function(subgrid_id, row_id) {
       var subgrid_table_id, rowspanValue;
       // grouping of subgrid along with grid
       var streamName = $('#idCommonGridTabledetailMainContainerPATHApp').jqGrid('getCell', row_id, 'Stream');
       var streamGroup = widget.getElements('[attr-stream = "' + streamName + '"]');
        rowspanValue = streamGroup[0].rowSpan;
        for (var i = 0; i < streamGroup.length; i++) {
            streamGroup[i].setAttributes({ rowspan: rowspanValue + 1 });
            streamGroup[i].getClosest("tr.ui-widget-content").getElement("[aria-describedby=idCommonGridTabledetailMainContainerPATHApp_\\%CompletionAvg]").setAttributes({ rowspan: rowspanValue + 1 });
            streamGroup[i].getClosest("tr.ui-widget-content").getElement("[aria-describedby=idCommonGridTabledetailMainContainerPATHApp_\\%WeightAvg]").setAttributes({ rowspan: rowspanValue + 1 });
        }
 }


subGridRowColapsed: function(subgrid_id, row_id) {
    var rowspanValue;
    var streamName = $('#idCommonGridTabledetailMainContainerPATHApp').jqGrid('getCell', row_id, 'Stream');
    var streamGroup = widget.getElements('[attr-stream = "' + streamName + '"]');
    rowspanValue = streamGroup[0].rowSpan;
    for (var i = 0; i < streamGroup.length; i++) {
         streamGroup[i].setAttributes({ rowspan: rowspanValue - 1 });
         streamGroup[i].getClosest("tr.ui-widget-content").getElement("[aria-describedby=idCommonGridTabledetailMainContainerPATHApp_\\%CompletionAvg]").setAttributes({ rowspan: rowspanValue - 1 });
         streamGroup[i].getClosest("tr.ui-widget-content").getElement("[aria-describedby=idCommonGridTabledetailMainContainerPATHApp_\\%WeightAvg]").setAttributes({ rowspan: rowspanValue - 1 });
    }
}