防止以内联编辑模式编辑特定的可编辑行的单元格

Yai*_*vet 2 javascript jquery jqgrid

在jqGrid中,我正在以内联编辑模式工作.

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

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

Ole*_*leg 10

属性的值editable对于所有行都是通用的,但该值仅由初始化内联编辑的editRow方法使用.因此,您可以动态地更改属性的值(如答案中所示).在每次调用之前设置正确的属性值非常重要.在答案中,您可以看到相应的代码示例和演示.editablesetColPropeditableeditRow

更新:如果你使用formatter: "actions"那么你可以"子类化"被$.fn.fmatter.rowactions调用的onclick处理程序.您可以在下面看到相应代码的示例

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;
}
Run Code Online (Sandbox Code Playgroud)

你会在这里找到相应的演示.仅当"tax"列中的值<= 20时,"note"列才可在演示中编辑:

在此输入图像描述

如果你想有datatype: "json"datatype: "xml"无的使用loadonce: true就应该更换呼叫getLocalRow到呼叫getRowDatagetCell在上面的代码.