jqGrid:選択的にセルを編集可能にすることは可能ですか?

1つのセルを編集できない列から編集可能にするにはどうしたらいいですか?
私の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で検査すると、 edit-cell クラスが正しく適用されることがわかります。
最後の注意として、最初のインスタンスで列を編集可能に設定すると機能します。

1

2 答え

私はそれを逆にすることをお勧めします。列を編集可能にしますが、編集可能にしたくないセルは無効にします。これは私がセルを無効にするために書いた関数です:

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

I call disableGridCell inside of my onEditFunc of my grid's editRow function:

$('#grid').jqGrid('editRow', id, keys, onEditFunc);

function onEditFunc(id) {
   if (condition to disable cell) {
      disableGridCell('CellName');
   }
}
1
追加された
スマート..私は、 onEditFunc をjqGridオプション afterEditCell に割り当てることができたと思います。私は正しい? (私はとにかく試してみるつもりです...)
追加された 著者 Marco Bolis,
私は beforeEditCell を意味します...
追加された 著者 Marco Bolis,

私は問題への素敵な回避策を見つけました(Walterに感謝します)。

すべてのセルをロックし、宣言的な方法でそれらを選択的にロック解除するのではなく(ロード時間が長くなる可能性があります)、すべてのセルを編集可能と宣言しています。
次に、 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);
        }
    },
   //...
});

このようにして、セルはすぐ前の値にリセットされ、セルは編集不可能なセルになりますので、コールバックが編集されていないセルにつき1回だけ呼び出されるようにします。最初の呼び出しの後に。

1
追加された