Запретить редактирование ячейки определенной редактируемой строки в режиме встроенного редактирования

В 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 в приведенном выше коде.

Другие вопросы по тегам