Это интересный вопрос!Да, ты можешь это сделать.Внутри loadComplete
обратного вызова у вас есть доступ к данным (ответ JSON, преобразованный в объект), который является параметром loadComplete
.Вы можете опубликовать информацию о строках, которая должна быть установлена в режиме встроенного редактирования непосредственно после загрузки данных.Например, это должны быть rowids и имена столбцов, которые можно редактировать.Вы можете использовать метод setColProp
(см. здесь ) или getColProp
(см. здесь ), чтобы изменить свойство editable
для столбцов и вызвать метод editRow
.Таким образом, вы можете полностью реализовать все, что вам нужно.
ОБНОВЛЕНО : В случае встроенного редактирования вы можете установить класс «not-editable-row» для любой строки, тогда jqGrid не будетпозволяет редактировать строку.Таким образом, внутри loadComplete(data)
вы можете перечислять элементы массива data.rows
и для каждого элемента, у которого свойство editable
равно false
, добавить в строку класс «not-editable-row».Код может быть примерно следующим:
$("#list").jqGrid({
// ... here all your other jqGrid options
loadComplete: function (data) {
var item, i, l = data && data.rows ? data.rows.length : 0;
for (i = 0; i < l; i++) {
item = data.rows[i];
if (item.editable === false) {
$("#" + item.id).addClass("not-editable-row");
}
}
}
});
ОБНОВЛЕНО 2 : Проблема очень проста.Либо вы должны изменить в приведенном выше коде if (item.editable === false) {
на if (item.editable === "false") {
или изменить "editable":"false"
с данных JSON на "editable": false
, что соответствует JSON-сериализации логических данных.
Как вы можете видеть из демоверсия подход к работе.
ОБНОВЛЕНО 3 .В более поздней версии jqGrid реализован rowattr
.Сейчас гораздо эффективнее использовать rowattr
.См. ответ для примера кода.