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}
    ]
});