jqGrid - редактировать только определенные строки для редактируемого столбца

Можно ли отключить редактирование в jqGrid для определенных ячеек в столбце, который помечен как редактируемый?

Из того, что я видел, единственными вариантами являются "все ячейки редактируемые" или "ни одна ячейка не редактируема". Есть ли способ обойти это?

2 ответа

Решение

Я рекомендую вам использовать так называемое "встроенное редактирование" для редактирования строк. Самое большое преимущество этого метода в том, что он очень интуитивно понятен и пользователю. Вы можете увидеть, как это работает, на демонстрационной странице http://trirand.com/blog/jqgrid/jqgrid.html. Выберите в этой демонстрации "Редактирование строки", а затем "Использование событий" или "Типы ввода" в левой части дерева. С помощью этого метода вы можете реализовать любую пользовательскую проверку, разрешено ли редактировать выбранную строку или нет внутри дескриптора события. onSelectRow или же ondblClickRow, Если вы разрешите редактирование, то вы звоните editRow метод jqGrid. Этот метод создает элементы управления вводом для всех редактируемых столбцов, и пользователь может изменять значения строк естественным образом. Изменения будут сохранены, если пользователь нажал клавишу "ввод" или отменил клавишу "esc".

Я лично предпочитаю осуществлять вызов editRow метод внутри ondblClickRow обработчик события. Таким образом, пользователь может продолжить выбор строк, как обычно, и может использовать двойной щелчок для редактирования строки. Псевдокод будет выглядеть следующим образом:

var lastSel = -1;
var isRowEditable = function (id) {
    // implement your criteria here 
    return true;
};
var grid = jQuery('#list').jqGrid({
    // ...
    ondblClickRow: function(id, ri, ci) {
        if (isRowEditable(id)) {
            // edit the row and save it on press "enter" key
            grid.jqGrid('editRow',id,true);
        }
    },
    onSelectRow: function(id) {
        if (id && id !== lastSel) {
            // cancel editing of the previous selected row if it was in editing state.
            // jqGrid hold intern savedRow array inside of jqGrid object,
            // so it is safe to call restoreRow method with any id parameter
            // if jqGrid not in editing state
            grid.jqGrid('restoreRow',lastSel);
            lastSel = id;
        }
    },
    pager: '#pager'
}).jqGrid('navGrid','#pager',{edit:false});

Вы можете сделать это логически. У вас должны быть критерии для ячеек, чтобы некоторые ячейки можно было редактировать, а некоторые - нет.

Я реализовал это в ряд.

Когда вы создаете XML для jqgrid, присвойте какой-нибудь идентификатор каждой строке.

На основе этих идентификаторов вы можете сделать ячейки этих строк редактируемыми или нередактируемыми, используя методы jqgrid.

Ниже приведен метод beforeEditCell:

beforeEditCell: function(rowid, cellname, value, iRow, iCol) {
   // here identify row based on rowid
   // if the row should not be editable than simply make the cells noneditable using
   editCell(iRow, iCol, false);
   jQuery(gridid).jqGrid("restoreCell",iRow,iCol);

}

Вы можете в дальнейшем реализовать себя.

Надеюсь, мое предложение поможет вам.:)

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