JQGrid: динамически установить ячейку в неизменяемый на основе содержимого - PullRequest
8 голосов
/ 18 января 2011

У меня проблемы с получением некоторых ячеек (с cellEdit: true) недоступными для редактирования, даже если для столбца установлено значение «Редактируемый».

Я пробовал много способов, например beforeEditCell, средства форматирования и т. Д. Ни один из них не работает.

Самое близкое, что у меня есть, - это установить форматер для столбца, который я хотел бы редактировать, а затем использовать setCell для установки класса «not-editable-cell» (фрагмент ниже). Первый раз, когда вы щелкаете по ячейке, она, к сожалению, переходит в режим редактирования, но если вы щелкаете в другом месте и пытаетесь повторно отредактировать ячейку, она успешно не редактируется.

Я также пытался использовать тот же фрагмент, но внутри beforeEditCell, он успешно останавливает редактирование ячейки, но в свою очередь «замораживает» сетку. Вы больше не можете выбирать любую другую ячейку.

function noEditFormatter(cellValue, options, rowObject) {
    if (cellValue == 'test')
        jQuery("#grid").jqGrid('setCell', options.rowId, 'ColName', '', 'not-editable-cell');
    return cellValue;
}

Любая помощь будет высоко ценится.

Ответы [ 3 ]

12 голосов
/ 18 января 2011

Идея использовать метод setCell для добавления класса «нередактируемая ячейка» в ячейки, которые должны быть недоступны для редактирования, верна.Вы выбираете только неправильное место, чтобы сделать это.Внутри пользовательского форматера сетка может быть еще не построена до конца.Я рекомендую вам использовать loadComplete или gridComplete , чтобы проверить сетку, содержащую текущую страницу , и пометить некоторые ячейки как недоступные для редактирования.

Я подготовил пример , который демонстрирует это.Как и в вашем примере, все ячейки, имеющие «тестовый» текст, помечены как недоступные для редактирования.Таким образом, вы можете проверить одну ячейку и пометить другие как не редактируемые.

3 голосов
/ 31 октября 2011
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}
1 голос
/ 19 февраля 2015

Я должен был решить эту проблему сейчас (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}
    ]
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...