簡體   English   中英

jqGrid setCell函數的第五個參數和編輯模式

[英]jqGrid setCell function 5th parameter and edit mode

我有一個jqGrid,我希望所有行都處於編輯模式。 但是,在某些情況下,我希望基於行數據的某些條件使該行中的單元格為只讀,但是我似乎無法使網格屈服(尚未)。

這就是我目前所擁有的。

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

該行已添加,並按我想要的方式進入了編輯模式,但是當涉及到對setCell()的調用時,它似乎並不影響該單元格。

有任何想法我在這里做錯了嗎?

調用editRow方法之前,應嘗試修改單元格的屬性。

此外,我只知道該行的editable屬性可以是“ 1”或“ 0”,而該類也只能是“ not-editable-row”類。 單元格的editable屬性是否存在?

有一種方法可以起作用。 您可以在調用editRow方法之前修改colModel editable屬性並在editRow調用之后將其重置為原始狀態。 有關如何在colModel進行動態修改的示例,請參見jqGrid:在將HTML表轉換為網格時啟用分頁

更新 :如果您已經在使用自定義格式器,則還可以將其包含在代碼自定義編輯中 您將在此處找到一個示例, 在自定義編輯類型字段中添加多個輸入元素 自定義格式化程序將僅用於顯示網格中的數據,如果行處於編輯模式, 則將使用custom_elementcustom_value

網格已經在使用其他列的列格式器,所以我決定走這條路。 我無法使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM