jqGrid setCell функция 5-й параметр и режим редактирования - PullRequest
1 голос
/ 25 августа 2010

У меня есть jqGrid, где я хочу, чтобы все строки были в режиме редактирования. Однако при определенных условиях я хочу, чтобы ячейка в этой строке была доступна только для чтения на основе некоторого состояния данных строки, но я не могу заставить сетку подчиняться моей воле (пока).

Это то, что у меня сейчас есть.

$(grid).addRowData(...);  // omitted for clarity
$(grid).jqGrid('editRow',rowid);
if (someCondition){
     $(grid).setCell(rowid, 'col1', '', '', {editable: false});
}

Строка добавляется и переводится в режим редактирования так, как я хочу, но когда доходит до вызова setCell (), похоже, она не влияет на ячейку.

Есть идеи, что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 25 августа 2010

Сетка уже использовала средства форматирования столбцов для других столбцов, поэтому я решил пойти по этому пути.Я не мог заставить его не изменять весь столбец на чтение / редактирование, используя метод, описанный Олегом.Я также решил сохранить состояние только для чтения как часть значения ячейки сетки.

colModel:

{ name: 'ARNumber', width: 70, editable: false, sortable: false, formatter: 'optionalReadonlyInputCellFormatter'},

настройка моего форматера / неформататора:

$.extend($.fn.fmatter, {
    optionalReadonlyInputCellFormatter: formatOptionalReadonlyInputCell
});

$.extend($.fn.fmatter.optionalReadonlyInputCellFormatter, {
    unformat: unformatOptionalReadonlyInputCell
});

formatter /неформатные функции:

function formatOptionalReadonlyInputCell(cellvalue, options, rowdata) {
    var readonly = cellvalue === undefined;
    if (readonly)
        return displayARNumberInput('');

    vals = cellvalue.split(",");
    var cellValue = vals[0];
    var readonly = !(vals[1] === undefined) || vals[1] == 1;

    if (readonly) {
        return displayARNumberSpan(cellValue);
    }
    else {
       return displayARNumberInput(cellValue);
    }
}

function unformatOptionalReadonlyInputCell(cellvalue, options, cellobject) {
    var readonly = (cellvalue == "") ? "0" : "1";
    if (readonly == "1") {
        return cellvalue + "," + readonly;
    }
    else {
        return $(cellobject).children().val() + "," + readonly;
    }
}

function displayARNumberInput(value) {
    var element = document.createElement("input");
    element.type = "text";
    element.value = value;
    return element.outerHTML;
}

function displayARNumberSpan(value) {
    var element = document.createElement("span");
    element.innerText = value;
    return element.outerHTML;
}
0 голосов
/ 25 августа 2010

Вы должны попытаться изменить свойство ячейки до того, как вызовет метод editRow.

Более того, я знаю только атрибут editable для строки, которая может быть "1"или" 0 "и класс" not-editable-row "также для класса.Существует ли атрибут editable для ячейки?

Есть один способ, который может работать.Вы можете изменить атрибут editable для столбца в colModel до вызова метода editRow и вернуть его в исходное состояние после вызова editRow.См. jqGrid: включить подкачку при преобразовании таблицы HTML в сетку , чтобы узнать, как выполнить динамическое изменение в colModel.

UPDATED : если вы уже используетепользовательский форматтер, вы также можете включить это в свой код пользовательское редактирование .Пример вы найдете здесь Добавить несколько элементов ввода в поле пользовательского типа редактирования .Пользовательский форматер будет использоваться только для отображения данных в сетке, но custom_element и custom_value , если строка находится в режиме редактирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...