Запретить редактирование ячейки определенной редактируемой строки в режиме встроенного редактирования
В jqGrid я работаю в режиме встроенного редактирования.
Когда пользователь пытается изменить строку (нажмите на значок действия пера), я хочу, чтобы предотвратить ({editable: false}
) редактирование ячейки определенной редактируемой строки на основе содержимого другой ячейки в этой строке.
grid.setColProp('myColumn',{editable:false});
это не хорошо для меня, потому что это отключит редактирование 'myColumn' во всех строках сетки, и я хочу применить его только к текущей редактируемой строке.
1 ответ
Стоимость имущества editable
является общим для всех строк, но значение будет использоваться только editRow
метод, который инициализирует встроенное редактирование. Таким образом, вы можете изменить значение editable
свойство динамически относительно setColProp
(как в ответе). Важно, чтобы вы установили правильное значение editable
собственность перед каждым вызовомeditRow
, В ответе вы можете увидеть соответствующий пример кода и демо.
ОБНОВЛЕНО: если вы используете 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;
}
Соответствующую демонстрацию вы найдете здесь. Столбец "заметка" доступен для редактирования в демоверсии, только если значение из столбца "налог" <= 20:
Если бы вы имели datatype: "json"
или же datatype: "xml"
без использования loadonce: true
Вы должны заменить вызов getLocalRow
на зов getRowData
или же getCell
в приведенном выше коде.