jqgrid frozenColumns +(单元格编辑和非冻结列的可排序/重新排序)

时间:2015-02-10 06:39:00

标签: jqgrid

请指导我解决一组已冻结的列,其余的具有单元格编辑功能以及使用jqgrid的列重新排序/显示隐藏选项。

谢谢。

2 个答案:

答案 0 :(得分:0)

问题是setFrozenColumns的当前实现有一些限制。编辑(在任何编辑模式下)和sortable: true不允许用于冻结列,但setFrozenColumns。此外,sortable: true不应允许使用冻结列的标题。另一方面,setFrozenColumns包含对某些参数的简单测试(请参阅here),如果设置了某些此类参数(如cellEditsortable),则该方法无效。< / p>

我在the postthe demo)中建议了如何实施变通方法。方法是从the answerthis one修改方法。

我发现你的问题很有趣,所以我创建了the demo,它演示了如何实现你的要求。它显示以下结果(GIF动画):

enter image description here

它主要使用以下代码

// create the grid
$grid.jqGrid({
    ...
});

$grid.bind("jqGridLoadComplete jqGridInlineEditRow jqGridAfterEditCell jqGridAfterRestoreCell jqGridInlineAfterRestoreRow jqGridAfterSaveCell jqGridInlineAfterSaveRow", function () {
    fixPositionsOfFrozenDivs.call(this);
});

$grid.jqGrid("setGridParam", {cellEdit: false, sortable: false});
$grid.jqGrid("setFrozenColumns");
$grid.jqGrid("setGridParam", {cellEdit: true, sortable: true});
fixPositionsOfFrozenDivs.call($grid[0]);

try {
    var p = $grid.jqGrid("getGridParam"), tid = $.jgrid.jqID(p.id), colModel = p.colModel, i, n = colModel.length, cm,
        skipIds = [];

    for (i = 0; i < n; i++) {
        cm = colModel[i];
        if ($.inArray(cm.name, ["cb", "rn", "subgrid"]) >=0 || cm.frozen) {
            skipIds.push("#jqgh_" + tid + "_" + $.jgrid.jqID(cm.name));
        }
    }

    $grid.jqGrid("setGridParam", {sortable: {options: {
        items: skipIds.length > 0 ? ">th:not(:has(" + skipIds.join(",") + "),:hidden)" : ">th:not(:hidden)"
    }}});

    $grid.jqGrid("sortableColumns", $($grid[0].grid.hDiv).find(".ui-jqgrid-labels"));
} catch (e) {}

答案 1 :(得分:0)

请尝试这个简单的解决方案,

隐藏或删除cellEdit: true

然后在setFrozenColumns

的上方和下方添加以下行

上一个代码:

 $("#jqGrid2").jqGrid('setFrozenColumns');

新守则:

$("#jqGrid2").jqGrid("setGridParam", {cellEdit: false, sortable: false});
$("#jqGrid2").jqGrid('setFrozenColumns');
$("#jqGrid2").jqGrid("setGridParam", {cellEdit: true, sortable: true});