【问题标题】:Prevent editing of a specific editable row's cell in inline-edit mode防止在线编辑模式下编辑特定可编辑行的单元格
【发布时间】:2012-10-08 23:10:05
【问题描述】:

在 jqGrid 中,我正在内联编辑模式下工作。

当用户尝试编辑一行时(单击笔操作图标),我想阻止({editable: false})根据该行中另一个单元格的内容编辑特定可编辑行的单元格。

grid.setColProp('myColumn',{editable:false}); 对我不利,因为这将禁用所有网格行中“myColumn”的编辑,我想仅在当前编辑的行上应用它。

【问题讨论】:

  • 看看这个旧答案:[如何在 jqGrid 中动态编辑单元格][1] 也许会有所帮助[1]:stackoverflow.com/questions/5092571/…
  • @Franky 这个答案只与cellEdit: true 模式有关。如上所述,我正在inline-edit 模式下工作。

标签: javascript jquery jqgrid


【解决方案1】:

属性editable 的值对所有行都是通用的,但该值仅由初始化 内联编辑的editRow 方法使用。因此,您可以相对于setColProp 动态更改editable 属性的值(如the answer)。请务必在每次调用editRow之前设置editable 属性的正确值。在the answer可以看到对应的代码示例和demo。

更新:如果您使用formatter: "actions",那么您可以“继承”在onclick 处理程序中调用的$.fn.fmatter.rowactions。下面你可以看到相应代码的示例

var orgRowActions = $.fn.fmatter.rowactions;
$.fn.fmatter.rowactions = function (rid, gid, act, pos) {
    var $grid = $("#" + $.jgrid.jqID(gid)),
        rowData = $grid.jqGrid("getLocalRow", rid),
        isNonEditable = false,
        result;
    // we can test any condition and change
    // editable property of any column
    if (act === "edit" && parseFloat(String(rowData.tax)) <= 20) {
        $grid.jqGrid("setColProp", "note", {editable: false});
        isNonEditable = true;
    }
    result = orgRowActions.call(this, rid, gid, act, pos);
    if (isNonEditable) {
        // reset the setting to original state
        $grid.jqGrid("setColProp", "note", {editable: true});
    }
    return result;
}

您将找到相应的演示here。仅当“税”列中的值

如果您在不使用loadonce: true 的情况下使用datatype: "json"datatype: "xml",则应将上述代码中的getLocalRow 调用替换为getRowDatagetCell 的调用。

【讨论】:

  • 调用editRow 命令的责任不在我手中,我正在使用Actions 格式化程序(保存、编辑、删除、取消)。有什么方法可以在 editRow 调用之前和之后干扰某些事件?
  • @YairNevet:我在答案中添加了解决方案的“操作”特定实现。
  • 做得好!真的非常感谢。
  • @Oleg 因为 $.fn.fmatter.rowactions 不再使用四个参数,现在只在较新版本的 jqGrid 中使用 action 参数。有没有办法在较新版本的 jqGrid 中进行相同的特定行单元格编辑?我正在使用 4.5.2 版
  • @Snipe656:我不确定您在 jqGrid 4.5.2 中实现“子类化”时到底遇到了哪个问题。替换方法$.fn.fmatter.rowactions应该和原来的参数个数一样。 result = orgRowActions.call(this, ...); 应该使用参数。要获取rowid 之类的信息,您可以使用this。查看旧实现的第一行here
猜你喜欢
  • 2020-06-08
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
相关资源
最近更新 更多