The value of the property editable
is common for all rows, but the value will be used only by editRow
method which initialize inline editing. So you can change the value of editable
property dynamically with respect of setColProp
(like in the answer). It's important that you set the correct value of the editable
property before every call of editRow
. In the answer you can see corresponding code example and the demo.
UPDATED: If you use formatter: "actions"
then you can "subclass" the $.fn.fmatter.rowactions
called in onclick
handler. Below you can see an example of the corresponding code
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;
}
The corresponding demo you will find here. The "note" column is editable in the demo only if the value from the "tax" column is <= 20:
If you would have datatype: "json"
or datatype: "xml"
without usage of loadonce: true
you should replace call of getLocalRow
to the call of getRowData
or getCell
in the above code.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…