我遇到一些问题,即使将列设置为可编辑,也会使某些单元格(使用cellEdit:true)不可编辑。
我尝试了很多方法,比如beforeEditCell,格式化程序等。似乎无法正常工作。
我最接近的是将格式化程序设置为我想要编辑的列,然后使用setCell设置'not-editable-cell'类(下面的代码段)。第一次单击单元格时,它很可能进入编辑模式,但是如果您单击其他位置并尝试重新编辑单元格,则它已成功无法编辑。
我也尝试使用相同的剪切但在beforeEditCell内部,它成功地阻止了单元格的编辑,但反过来“冻结”网格。您无法再选择任何其他单元格。
function noEditFormatter(cellValue, options, rowObject) {
if (cellValue == 'test')
jQuery("#grid").jqGrid('setCell', options.rowId, 'ColName', '', 'not-editable-cell');
return cellValue;
}
非常感谢任何帮助。
答案 0 :(得分:12)
使用setCell方法将类'not-editable-cell'添加到应该不可编辑的单元格的想法是正确的。你只选择了错误的地方。在自定义格式化器内部,网格可能尚未构建到最后。我建议您使用loadComplete或gridComplete检查当前页面的网格包含,并将某些单元格标记为不可编辑。
我准备了an example来证明这一点。与您的示例中一样,所有具有“测试”文本的单元格都标记为不可编辑。您可以检查一个单元格并将另一个单元格标记为不可编辑。
答案 1 :(得分:3)
var cellattr = function(rowId, tv, rawObject, cm, rdata) {
if(rawObject.locked) return ' class="not-editable-cell"';
};
在colModel中: 每列选项添加
{name: 'name',index: 'name', editable: true, width: 100, sortable: false, align: 'center', cellattr: cellattr}
答案 2 :(得分:1)
我现在必须解决这个问题(2015)并找到an approach that looks clean:如果不允许编辑单元格,请为cellbeginedit
指定一个返回false
的函数。取自链接文章并修改:
var checkIfRowIsValid = function (rowIndex) {
//somehow get cellValue
...
if (cellValue == 'test') return false;
}
// initialize jqxGrid
$("#jqxgrid").jqxGrid(
{
source: dataAdapter,
editable: true,
selectionmode: 'singlecell',
columns: [
{ text: 'First Name', columntype: 'textbox', datafield: 'firstname',
width: 90, cellbeginedit: checkIfRowIsValid},
{ text: 'Last Name', datafield: 'lastname', columntype: 'textbox',
width: 90, cellbeginedit: checkIfRowIsValid}
]
});