JQGrid:根据内容动态设置单元格不可编辑

我有一些问题,即使列设置为可编辑,也会使某些单元格(使用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; } 

任何帮助将非常感激。

使用setCell方法将类’not-editable-cell’添加到应该不可编辑的单元格的想法是正确的。 你只选择了错误的地方。 在自定义格式化程序内部,网格可能尚未构建到最后。 我建议您使用loadComplete或gridComplete来检查当前页面的网格包含,并将某些单元格标记为不可编辑。

我准备了一个certificate这一点的例子 。 与您的示例中一样,所有具有“测试”文本的单元格都被标记为不可编辑。 在这种方式中,您可以检查一个单元格并将另一个单元格标记为不可编辑。

 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} 

我现在必须解决这个问题(2015)并找到一种看起来很干净的方法 :为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} ] });