JQGrid: динамически задавать ячейки редактируются на основе содержимого
У меня возникли некоторые проблемы с получением некоторых ячеек (с cellEdit: true), чтобы быть не редактируемыми, даже если столбец установлен в редактируемый.
Я пробовал много способов, таких как beforeEditCell, formatters и т. д. Никто, кажется, работают.
самое близкое, что у меня есть,-это установить форматер в столбец, который я хотел бы редактировать, а затем использовать setCell для установки класса "не редактируемая ячейка" (фрагмент ниже). При первом нажатии на ячейку она, к сожалению, переходит в режим редактирования, но если вы нажимаете в другом месте и пытаетесь повторно отредактировать ячейку, она успешно не редактируется.
Я также попытался использовать тот же обрезанный, но внутри beforeEditCell, он успешно останавливает редактирование ячейки, но, в свою очередь, "замораживает" сетку. Вы больше не можете выбрать другую ячейку.
function noEditFormatter(cellValue, options, rowObject) {
if (cellValue == 'test')
jQuery("#grid").jqGrid('setCell', options.rowId, 'ColName', '', 'not-editable-cell');
return cellValue;
}
любая помощь была бы очень признательна.
3 ответов
идея использовать setCell метод добавления класса "не редактируемая ячейка" в ячейки, которые должны быть не редактируемыми, является правильным. Вы выбрали для этого не то место. Внутри пользовательского форматера сетка еще не может быть построена до конца. Я рекомендую вам использовать loadComplete или gridComplete для изучения сетки содержать текущей страницы и отметить некоторые ячейки не редактируются.
приготовил an пример, которые демонстрируют это. Как и в вашем примере, все ячейки с" тестовым " текстом помечены как не редактируемые. Таким образом, вы можете изучить одну ячейку и отметить другую ячейку как не редактируемую.
var cellattr = function(rowId, tv, rawObject, cm, rdata) {
if(rawObject.locked) return ' class="not-editable-cell"';
};
в colModel: параметры каждого столбца добавить
{name: 'name',index: 'name', editable: true, width: 100, sortable: false, align: 'center', cellattr: cellattr}
Я должен был решить это сейчас (2015) и нашел подход, который выглядит чистым: укажите функцию для cellbeginedit
возвращает false
если ячейка не может быть отредактирован. Взято из связанной статьи и изменено:
var checkIfRowIsValid = function (rowIndex) {
//somehow get cellValue
...
if (cellValue == 'test') return false;
}
// initialize jqxGrid
$("#jqxgrid").jqxGrid(
{
source: dataAdapter,
editable: true,
selectionmode: 'singlecell',
columns: [
{ text: 'First Name', columntype: 'textbox', datafield: 'firstname',
width: 90, cellbeginedit: checkIfRowIsValid},
{ text: 'Last Name', datafield: 'lastname', columntype: 'textbox',
width: 90, cellbeginedit: checkIfRowIsValid}
]
});