1

分组后,有没有办法让当前行的展开/折叠图标不会自动展开/折叠所有子网格的行?就让它保持原样吧。

var parmColumnName = 'Model';

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

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

在此处输入图像描述

//折叠分组的Make

在此处输入图像描述

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

在此处输入图像描述

4

1 回答 1

1

我觉得你的问题很有趣,但解决这个问题并不容易。在我看来,两个 jqGrid 方法的源代码groupingRender尤其groupingToggle应该改变。我建议您可以在演示中看到的解决方案。该演示覆盖了groupingRendergroupingToggle方法的原始代码。您将在下面找到我的建议的更完整描述。

首先,我想用我的话来描述这个问题。您在问题的文本中使用了“子网格的行”一词,这带来了误解。您使用的是多级分组。我认为第一个问题是groupCollapse: true选项的行为。在多级分组的情况下,jqGrid 当前仅折叠数据而不是所有分组标题,直到顶层。该演示使用 3 级分组和选项groupCollapse: true. 它不正常

在此处输入图像描述

而不是直觉上的预期

在此处输入图像描述

您在问题中提出的另一个问题是当前的消费行为。问题是,如果用户已经将节点折叠到所有看起来紧凑的节点,就像我发布的最后一张图片一样,结束然后用户展开一些节点jqGrid 展开节点的所有子分组标题直到数据。因此,如果一个仅扩展“test1”节点,则其所有子节点将被扩展,而不是仅扩展下一个分组级别

为了解决第一个问题(尽管打开了子分组标题groupCollapse: true),我更改了一行groupingRender方法

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;
    },
});

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

更新:我发布了带有我上面建议的更改的拉取请求。

更新 2:我的拉取请求与 jqGrid 的主要代码合并。今天发布的新的 4.5.4 版本的 jqGrid 包括了更改。新的演示使用 jqGrid 4.5.4,它的工作方式与您期望的一样。因此,要解决您在问题中描述的问题,您只需更新 jqGrid。

于 2013-10-06T09:35:00.690 回答