【问题标题】:jqgrid frozenColumns + (cell Edit & sortable/reordering of non frozen columns)jqgrid frozenColumns +(非冻结列的单元格编辑和可排序/重新排序)
【发布时间】:2015-02-10 06:38:59
【问题描述】:

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

谢谢。

【问题讨论】:

  • 您需要编辑一些冻结的列还是只编辑没有frozen:true属性的列?
  • @Oleg - 我只需要编辑非冻结列,但这些非冻结列也需要重新排序或显示/隐藏。
  • @Runcorn - 谢谢,但我已经看过你提到的网站。尽管 jqgrid 当前存在限制,但我无法弄清楚 - 冻结列不能与非冻结列的重新排序一起工作,是否有可能合并它或者我应该切换到其他网格解决方案。

标签: jqgrid


【解决方案1】:

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

隐藏或删除cellEdit: true

然后在 setFrozenColumns 的上方和下方添加以下行

之前的代码:

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

新代码:

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

【讨论】:

    【解决方案2】:

    问题是setFrozenColumns的当前实现有一些限制。 冻结列不允许编辑(在任何编辑模式下)和sortable: true,但setFrozenColumns。此外sortable: true 应该不允许使用冻结列的标题。另一方面,setFrozenColumns 包含对一些参数的简单测试(参见here),如果设置了一些此类参数(如cellEdit 或sortable),该方法将不执行任何操作。

    我在the post(和the demo)中建议了如何实施解决方法。方法是修改the answer和this one的方法。

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

    它主要使用以下代码

    // 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) {}
    

    【讨论】:

    • @Oleg- 非常感谢。我是 jqgrid 的新手,我发现您的许多帖子非常有用。仍在努力充分利用它。我无法关联您的答案之一中提到的 bDiv、cDiv、hDiv、fbDiv、fhDiv、uDiv 等项目。尝试在加载 jqgrid 时根据条件启用/禁用行,在加载 jqgrid 时再次根据条件启用/禁用列,在基于条件的行单元格编辑中,甚至为冻结列添加具有值的新行,所有这些都在相同的jqgrid。会及时通知你。再次感谢!
    • @user3759787:不客气!您是否尝试过调试我的开发人员工具演示(在 Web 浏览器中按 F12 启动)。如果您在创建网格后的某处设置断点,您将看到$grid[0] ($("#list")[0]) 具有grid 属性和hDiv、bDiv 和其他属性。 jqGrid 创建并填充grid 属性。我无法一次回答您的所有问题,但如果需要,您可以提出新问题。如果当前问题现在解决了,你应该"accept"答案。
    猜你喜欢
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多