2010-08-25 75 views
1

我有一個jqGrid,我希望所有的行都處於編輯模式。但是,在某些情況下,我希望該行中的某個單元格基於行數據的某些條件進行只讀,但似乎無法讓網格屈服於我的意願(但)。jqGrid setCell函數第5個參數和編輯模式

這是我目前擁有的。

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

行加入並投入只是因爲我想編輯模式,但是當它到達調用setCell(),它似乎並沒有影響到細胞。

任何想法我在做什麼錯在這裏?

回答

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

格式化/ unformatter功能:

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

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

此外,我知道只有editable屬性的行可以是「1」或「0」和類「不可編輯的行」也爲類。該單元格的editable屬性是否存在?

有一種方法可以工作。您可以在調用editRow方法之前修改editable屬性列中的colModel,並在調用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