2013-09-26 85 views
1

分组之后时,不要自动展开所有亚格行,是否有扩大当前行的/折叠图标不会自动展开/折叠所有子网格的行的方法吗?就这样保持原样。点击分组列的展开图标

var parmColumnName = 'Model'; 

$('#test').jqGrid('groupingGroupBy'), 
    parmColumnName, 
    { 
     groupCollapse: true, 
     groupField: ['name'] 
    } 
); 

//玩过之后的原始设置。 (见宝马X5下)

enter image description here

//关闭的分组让

enter image description here

//然后展开分组制作(所有型号的默认扩展,我不知道希望它改变,我希望它看起来像上面的原始快照)

enter image description here

+0

您是否只使用子网格或数据分组?网格看起来更像TreeGrid,而不是与子网格的分组网格。父母节点(例如BMW)的VIN列的值似乎与儿童的值(X3,X5,Z3)无关。你能发布更完整的代码吗?最好的办法是发布你使用的演示。 – Oleg

+0

我正在使用数据分组(groupingGroupBy)。虽然我没有使用TreeGrid。以下是https://dealerapp.bookitout.com/zzJqGrid/Inventory1.cshtml中演示页面的临时链接。该链接不会长时间在线。只需将Make列拖到顶部的框中即可。然后将模型列拖到顶端的框中。 – fletchsod

+0

那么,你卡住了? – fletchsod

回答

1

我觉得你的问题很有趣,但对于问题的解决方案是不容易的。在我看来,两种方法的jqGrid和groupingRender特别groupingToggle的源代码应该改变。我建议你的解决方案可以在演示中看到。该演示将覆盖的groupingRendergroupingToggle方法原代码。我将在下面找到更多关于我的建议的完整描述。

首先我想用我的话来描述这个问题。你在你的问题的文本中使用了“子网格的行”这个词,这会带来误解。你用什么多级分组。在我看来,第一个问题是groupCollapse: true选择的行为。在多层分组的情况下,jqGrid目前崩溃只有数据而不是所有的分组头,直到顶层。 The demo使用3级分组和选项groupCollapse: true。它dysplays

enter image description here

,而不是直观地预计

enter image description here

,你在你的问题制定是花费的当前行为的另一个问题。问题是,如果用户已经将节点折叠为看起来很紧凑,就像我发布的最后一张照片一样,那么用户展开某个节点jqGrid展开节点的所有子节点组标题,直到数据。因此,如果仅扩展例如“测试1”节点,则其所有子节点将被扩展,而不是仅在下一个分组级别中花费

要解决的第一个问题(尽管groupCollapse: true打开子分组报头),我改变one linegroupingRender方法从

str += "<tr id=\""+hid+"\" role=\"row\" class= \"ui-widget-content jqgroup ui-row-"+$t.p.direction+" "+clid+"\"><td style=\"padding-left:"+(n.idx * 12) + "px;"+"\" colspan=\""+colspans+"\">"+icon+$.jgrid.template(grp.groupText[n.idx], gv, n.cnt, n.summary)+"</td></tr>"; 

str += "<tr id=\""+hid+"\"" +(grp.groupCollapse && n.idx>0 ? " style=\"display:none;\" " : " ") + "role=\"row\" class= \"ui-widget-content jqgroup ui-row-"+$t.p.direction+" "+clid+"\"><td style=\"padding-left:"+(n.idx * 12) + "px;"+"\" colspan=\""+colspans+"\">"+icon+$.jgrid.template(grp.groupText[n.idx], gv, n.cnt, n.summary)+"</td></tr>"; 

你问的主要问题是更难一点。您可以在下面找到固定版本

$.jgrid.extend({ 
    groupingToggle : function(hid){ 
     this.each(function(){ 
      var $t = this, 
      grp = $t.p.groupingView, 
      strpos = hid.split('_'), 
      uidpos, 
      //uid = hid.substring(0,strpos+1), 
      num = parseInt(strpos[strpos.length-2], 10); 
      strpos.splice(strpos.length-2,2); 
      var uid = strpos.join("_"), 
      minus = grp.minusicon, 
      plus = grp.plusicon, 
      tar = $("#"+$.jgrid.jqID(hid)), 
      r = tar.length ? tar[0].nextSibling : null, 
      tarspan = $("#"+$.jgrid.jqID(hid)+" span."+"tree-wrap-"+$t.p.direction), 
      getGroupingLevelFromClass = function (className) { 
       var nums = $.map(className.split(" "), function (item) { 
          if (item.substring(0, uid.length + 1) === uid + "_") { 
           return parseInt(item.substring(uid.length + 1), 10); 
          } 
         }); 
       return nums.length > 0 ? nums[0] : undefined; 
      }, 
      itemGroupingLevel, 
      collapsed = false, tspan; 
      if(tarspan.hasClass(minus)) { 
       if(grp.showSummaryOnHide) { 
        if(r){ 
         while(r) { 
          if($(r).hasClass('jqfoot')) { 
           var lv = parseInt($(r).attr("jqfootlevel"),10); 
           if( lv <= num) { 
            break; 
           } 
          } 
          $(r).hide(); 
          r = r.nextSibling; 
         } 
        } 
       } else { 
        if(r){ 
         while(r) { 
          itemGroupingLevel = getGroupingLevelFromClass(r.className); 
          if (itemGroupingLevel !== undefined && itemGroupingLevel <= num) { 
           break; 
          } 
          $(r).hide(); 
          r = r.nextSibling; 
         } 
        } 
       } 
       tarspan.removeClass(minus).addClass(plus); 
       collapsed = true; 
      } else { 
       if(r){ 
        var showData = undefined; 
        while(r) { 
         itemGroupingLevel = getGroupingLevelFromClass(r.className); 
         if (showData === undefined) { 
          showData = itemGroupingLevel === undefined; // if the first row after the opening group is data row then show the data rows 
         } 
         if (itemGroupingLevel !== undefined) { 
          if (itemGroupingLevel <= num) { 
           break;// next item of the same lever are found 
          } else if (itemGroupingLevel === num + 1) { 
           $(r).show().find(">td>span."+"tree-wrap-"+$t.p.direction).removeClass(minus).addClass(plus); 
          } 
         } else if (showData) { 
          $(r).show(); 
         } 
         r = r.nextSibling; 
        } 
       } 
       tarspan.removeClass(plus).addClass(minus); 
      } 
      $($t).triggerHandler("jqGridGroupingClickGroup", [hid , collapsed]); 
      if($.isFunction($t.p.onClickGroup)) { $t.p.onClickGroup.call($t, hid , collapsed); } 
      }); 
     return false; 
    }, 
}); 

The demo演示了我建议的所有更改的结果。我会将更改作为pull请求发布到trirand。我希望这些更改将包含在jqGrid的主代码中。

已更新:我发布了the pull request,其中包含上面我提出的更改。

UPDATED 2:我的pull请求与jqGrid的主代码合并在一起。今天发布的jqGrid 4.5.4新版本包含了已更改的版本。 The new demo使用jqGrid 4.5.4,它的工作方式与您的预期相同。所以要解决你在你的问题中描述的问题,你只需要更新jqGrid。

+0

谢谢Oleg!我会尽快研究它。所以,“多级分组”就是它所称的。我会记住的。我会发布一个新的问题,我周四上周有一个新问题,我想知道一个解决方法。这是关于使用jqGrid的beforeRequest事件来调用“GroupingGroupBy”导致它进入无限循环。 :-( – fletchsod

+0

是的,我知道这些脚本有点难以使用,我得到了很多很难的项目,大声笑!一旦有更多的项目完成并安顿下来,我会更好地简化它:) – fletchsod

+0

@fletchsod:不客气! – Oleg