Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jqGrid:可以有选择地使单元格可编辑吗?_Jqgrid - Fatal编程技术网

jqGrid:可以有选择地使单元格可编辑吗?

jqGrid:可以有选择地使单元格可编辑吗?,jqgrid,Jqgrid,如何使不可编辑列中的单个单元格可编辑? 我的javaScript如下所示: $( '#grid' ).jqGrid({ // ... cellEdit : true, colModel : [ { name : "id", index : "id", editable : false }, { name : "wbs", index : "wbs", editable : false }, { name : "value",

如何使不可编辑列中的单个单元格可编辑?
我的javaScript如下所示:

$( '#grid' ).jqGrid({
    // ...
    cellEdit : true,
    colModel : [
        { name : "id", index : "id", editable : false },
        { name : "wbs", index : "wbs", editable : false },
        { name : "value", index : "value", editable : false }
    ],
    loadComplete : function(data) {
        // ... foreach ( cell in data.rows.columns ) ...
        if ( cell.shouldBeEditable ) {
            jQuery('#grid').setCell(cell.row, cell.col, '', 'green', { editable : true });
        }
    }
    // ...
}
因此,在全局设置列为不可编辑后,我尝试根据一些标准将它们设置为本地可编辑(为了更容易识别它们,我还将它们绘制为绿色)

唉,它不起作用:单元格变成绿色,但当我尝试单击它们时,它们不会变成可编辑的。
使用firebug检查所选单元格将显示要正确应用的
编辑单元格
类。

最后一点,如果我在第一个实例中将列设置为可编辑,那么它就可以工作。

我建议您反向操作。使列可编辑,但禁用不希望编辑的单元格。这是我编写的用于禁用单元格的函数:

// cellName is the name defined in your colModel
function disableGridCell(cellName) {
    var cell = $('[name="' + cellName + '"]');
    cell.css('display', 'none');

    var div = $("<div>")
        .css('width', '100%')
        .css('height', '100%')
        .css('border', '1px solid #000')
        .css('background-color', '#CCC')
        .text('xxxxxxxxxxxx');

    cell.parent().append(div);
}

我找到了解决这个问题的好办法(感谢沃尔特让我走上了正确的道路)

我将所有单元格声明为可编辑,而不是以声明方式锁定所有单元格并有选择地解锁它们(这可能会导致较长的加载时间)。
然后我将回调附加到
afterEditCell
选项:

var $grid = $('#grid');
$grid.jqGrid({
    // ...
    afterEditCell : function(rowid, cellname, value, iRow, iCol) {
        if ( shouldNotBeEditable(iRow, iCol) ) {
            $grid.setCell(rowid, cellname, '', 'not-editable-cell');
            $grid.restoreCell(iRow, iCol);
        }
    },
    // ...
});

通过这种方式,单元格将立即重置为其先前的值,并且我确保每个不可编辑的单元格只调用一次回调,因为在第一次调用后,该单元格被设置为一个不可编辑的单元格。

Smart。。我想我可以将
onEditFunc
分配给jqGrid选项
afterEditCell
。我说得对吗?(我无论如何都要试试……)
var $grid = $('#grid');
$grid.jqGrid({
    // ...
    afterEditCell : function(rowid, cellname, value, iRow, iCol) {
        if ( shouldNotBeEditable(iRow, iCol) ) {
            $grid.setCell(rowid, cellname, '', 'not-editable-cell');
            $grid.restoreCell(iRow, iCol);
        }
    },
    // ...
});