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);
}
Вы можете в дальнейшем реализовать себя.
Надеюсь, мое предложение поможет вам.:)