【问题标题】:How to restrict particular Row to be selected on Header Select All event in JQGRID如何限制在 JQGRID 中的 Header Select All 事件中选择特定行
【发布时间】:2015-11-10 10:38:01
【问题描述】:

使用 jqGrid,我通过以下事件禁用了复选框列上的行选择:

beforeSelectRow: function (rowid, e) {
    var $myGrid = $(this),
        i = $.jgrid.getCellIndex($(e.target).closest('td')[0]),
        cm = $myGrid.jqGrid('getGridParam', 'colModel');

    var rowData = $grid.getRowData(rowid);
    var $isSelectable = true;
    if (rowData != null) {
        if (rowData.Status == -1) // Row selection depends on 'Status' property row data ( -1 : not selectable else selectable)
            $isSelectable = false;
        }
        return $isSelectable;
    },

但是当我尝试单击标题复选框时,它会选择所有行。我正在尝试使用事件onSelectAll,但它在行选择过程之后被调用,并且我无法在行选择更改之前找到调用的适当事件。请提出适当的解决方案。

编辑:

网格的复选框即使被禁用也可能具有值(即选中/未选中)。

网格具有导航到另一个页面的超链接。

【问题讨论】:

  • 您使用哪个版本的 jqGrid?您使用哪个 jqGrid 分支(free jqGridGuriddo jqGrid JS 或版本 编辑,并希望允许带有Status === -1 的行可编辑?
  • 我正在使用 jqGrid 4.5.2 免费的 jqGrid,。仅使用参数multiselect : true 没有额外的编辑。

标签: javascript jquery jqgrid


【解决方案1】:

实现您的要求的最简单方法是使用rowattr禁用 Status 等于-1 的行。

The demo 使用free jqGrid 4.10.0,选择所有行的结果如下图所示:

它使用以下rowattr

rowattr: function (rd) {
    if (rd.closed) {
        return {
            "class": $(this).jqGrid("getGuiStyles", "states.disabled")
        };
    }
}

代码使用closed 列而不是Status 列,并且在您的情况下,演示的输入值是布尔值而不是数字或字符串。您可以根据自己的目的轻松修改上述代码。

如果使用旧的 jqGrid 4.5.2 可以将上面的代码修改为

rowattr: function (rd) {
    if (rd.closed) {
        return {
            "class": "ui-state-disabled ui-jqgrid-disablePointerEvents"
        };
    }
}

并定义CSS类ui-jqgrid-disablePointerEvents如下:

.ui-jqgrid-disablePointerEvents {
    pointer-events: none;
}

The demo 使用 jqGrid 4.5.2,它也可以工作。

【讨论】:

  • 感谢您的宝贵意见。但是在应用 ui-state-disabled 类之后的问题,该行被禁用(禁用的行也可以有已检查/未检查的值)并且检查的状态对客户端不可见。应用上述类后,某些网格列上有超链接,超链接功能不起作用。谢谢
猜你喜欢
  • 2017-01-14
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 2010-09-23
相关资源
最近更新 更多