2

セル編集で、編集中にセルの編集タイプを変更する方法はありますか(特定の条件が満たされている場合)?

「説明」フィールドを持つcolModelがあり、デフォルトで入力として扱われるとします。クリックしてそのセルを編集すると、入力が現在のセル値で表示されます。ここで、特定の条件が満たされた場合、ユーザーがそのセルをクリックして編集するときに、入力の代わりに選択が表示されるようにしたいと思います。

setColPropを使用して、edittypeとeditoptionsの両方を変更しようとしましたが、適切な場所で変更していないか(beforeCellEditイベントで変更しました)、そのように機能しません。

ありがとう。

UPD

あなたが提案した戦略を使おうとしましたが、メソッドを呼び出した後もセルに入力が表示されます。setColProp

var originalEditCell = $.fn.jqGrid.editCell;

    $.jgrid.extend({
        editCell: function (iRow, iCol, isStartEditing) {

            if (iCol === 4 && classEditMode) {

                $(this).jqGrid('setColProp', "ColName4", { edittype: "text" });
                var cell = $(this).find('tr:eq(' + iRow + ')').find('td[aria-describedby="gridFix_Description"]');
                cell.find('select').remove();
                cell.append($('<input />').attr('id', iRow + '_Description')
                                          .attr('name', 'Description')
                                          .attr('role', 'textbox')
                                          .width('98%')
                                          .text(""));
            }
            return originalEditCell.call(this, iRow, iCol, isStartEditing);
        }
    });

グリッドは引き続き選択を生成します。なぜですか?

ありがとう

UPD2

申し訳ありませんが、setColPropメソッドにcolnameの正しい変数を含めるのを忘れていました。他の誰かがそれを必要とする場合に私がこの問題をどのように解決したかを記録するために、私は投稿でそれを修正しました。

ありがとう。

4

1 に答える 1

1

onCellSelectコールバックを使用するか、呼び出されるbeforeSelectRowに一部のプロパティが動的に変更される場合を管理できます。問題は、キーボアナビゲーションの場合には役に立たないということだけです。 editCell

安全な回避策として、少し注意が必要ですが、jqGridメソッドの「サブクラス化」を使用することをお勧めしますeditCellここここなどを参照)。対応するコードフラグメントは次のようになります

var originalEditCell = $.fn.jqGrid.editCell;

$.jgrid.extend({
editCell: function (iRow, iCol, isStartEditing) {
        // here you can do some actions before editing
        return originalEditCell.call(this, (iRow, iCol, isStartEditing);
    }
});
于 2012-12-18T18:39:11.383 に答える