jqGrid setCell函数第5个参数和编辑模式

时间:2010-08-25 15:19:02

标签: javascript jqgrid

我有一个jqGrid,我希望所有行都处于编辑模式。但是,在某些情况下,我希望该行中的一个单元格基于行数据的某些条件只读取,但我似乎无法让网格弯曲到我的意愿(还)。

这就是我现在所拥有的。

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

添加行并按照我的意愿进入编辑模式,但是当它调用setCell()时,它似乎不会影响单元格。

我在这里做错了什么想法?

2 个答案:

答案 0 :(得分:0)

您应该尝试在调用editRow方法之前修改单元格的属性。

此外,我只知道该行的editable属性可以是“1”或“0”,类也是“not-editable-row”。该单元格的editable属性是否存在?

有一种方法可行。您可以在调用editable方法之前修改colModel中的列的editRow属性,并将其重置为{{1}之后的原始状态调用。有关如何在editRow中进行动态修改的示例,请参阅jqGrid: Enable paging while converting HTML table to grid

更新:如果您已使用自定义格式化程序,则还可以在代码custom editing中包含该格式。您将在此处找到一个示例Add multiple input elements in a custom edit type field。自定义格式化程序仅用于显示网格中的数据,但如果行处于编辑模式,则 custom_element custom_value

答案 1 :(得分:0)

网格已经在其他列中使用列格式化器,所以我决定走这条路。我无法使用Oleg描述的方法将整个列更改为只读/可编辑。我还决定将只读状态存储为网格单元格值的一部分。

colModel:

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

设置我的格式化程序/ unformatter:

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

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

formatter / unformatter functions:

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