jqgrid - 动态启用分组

时间:2012-09-29 22:25:28

标签: jqgrid

我能够从jqgrid演示页面中的示例实现分组功能。但是我不想默认启用分组,但是在更改选择列表时我想启用分组功能。我尝试了几种选择,但没有一种是成功的?有人可以帮助我,可能是我错过了什么。这是我的代码......

$("#dynamicGrouping").change(function() { 
    var value = $(this).val(); 
    if(value) { 
        if(value == '') { 
            $('#grid').jqGrid('groupingRemove', true); 
        } else { 
            $('#grid').jqGrid('setGridParam', { grouping:true });
            $('#grid').jqGrid('groupingGroupBy', value);
            $('#grid').trigger('reloadGrid');
        } 
    }
});

我的网格定义:

jQuery(function() {
    $('#grid').jqGrid({
            .....
            .....
        grouping: false,
        groupingView : { 
                groupField : ['field_name'], 
            groupColumnShow : [true], 
            groupText : ['<b>{0} - {1} Item(s)</b>'], 
            groupCollapse : false, 
            groupOrder: ['asc'], 
            groupDataSorted : true 
            },
        .......
        .......
    });
});

1 个答案:

答案 0 :(得分:12)

我认为你在代码中犯了一些错误。您发布的代码似乎是正确的,但您不需要另外设置grouping:true并触发reloadGrid,因为groupingGroupBy会自动执行此操作。

The demo演示了动态设置或删除分组。

enter image description here

所以你可以使用

$("#dynamicGrouping").change(function () {
    var groupingName = $(this).val();
    if (groupingName) {
        $('#grid').jqGrid('groupingGroupBy', groupingName);
    } else {
        $('#grid').jqGrid('groupingRemove');
    }
});

或更高级的版本

$("#dynamicGrouping").change(function () {
    var groupingName = $(this).val();
    if (groupingName) {
        $('#grid').jqGrid('groupingGroupBy', groupingName, {
            groupOrder : ['desc'],
            groupColumnShow: [false],
            groupCollapse: true
        });
    } else {
        $('#grid').jqGrid('groupingRemove');
    }
});

更新:一切也适用于JSON数据:请参阅the demo

更新2 :我再次查看代码,发现gridview会在网格初始化时设置为true :见the lines。如果您没有gridview: true并且最初使用grouping: false,那么您将无法仅更改grouping: true。您还必须正确设置the grouping limitations中的其他参数。

所以你必须自己遵守限制规则:

scroll: false,
rownumbers: false,
treeGrid: false,
gridview: true,

顺便提一下,我建议始终使用gridview: true ,因为效果会更好。