2010-08-25 463 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