禁止在内联编辑模式下编辑特定的可编辑行的单元格
在jqGrid中,我正在以内联编辑模式工作。
当用户尝试编辑一行(单击笔操作图标)时,我想阻止( {editable: false}
)根据此行中另一个单元格的内容编辑特定的可编辑行的单元格。
grid.setColProp('myColumn',{editable:false});
对我不好,因为这会禁用所有网格行中’myColumn’的编辑,我只想在当前编辑的行上应用它。
editable
属性的值对于所有行都是通用的,但该值仅由初始化内联编辑的editRow
方法使用。 因此,您可以根据setColProp
动态更改editable
属性的值(如答案中所示 )。 在每次调用editRow
之前设置正确的editable
属性值非常重要。 在答案中,您可以看到相应的代码示例和演示。
更新 :如果您使用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; }
你会在这里找到相应的演示。 仅当“tax”列中的值<= 20时,才能在演示中编辑“note”列:
如果你有datatype: "json"
或datatype: "xml"
而不使用loadonce: true
你应该在上面的代码getCell
getLocalRow
的调用替换为getRowData
或getCell
的调用。