【问题标题】:jqGrid setCell function 5th parameter and edit modejqGrid setCell函数第5个参数和编辑模式
【发布时间】:2010-08-25 15:19:01
【问题描述】:

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

这是我目前拥有的。

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

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

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

【问题讨论】:

    标签: javascript jqgrid


    【解决方案1】:

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

    colModel:

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

    我的格式化程序/取消格式化程序的设置:

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

    格式化程序/取消格式化程序函数:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        相关资源
        最近更新 更多