0

私は問題があります。jqGridのセル編集を使用しています。一度に 1 つのセルのみを編集できるようにする必要があるため、インライン編集用にそれを変更したくありません。

問題は、編集後に他のセルを強制的に編集する必要があるフィールドがあることです。したがって、ユーザーが最初のセルを特定の値に変更した場合、それらのセルを編集用に開く必要があります。

これを行う方法はありますか?私は .jqGrid('editCell',...) を試しましたが、一度に 1 つのセルでしか実行できません。また、3 番目と最後のセルを強制的に編集するために編集する必要がある次のセルを要求することはできません。これは、ユーザーがその 2 番目のセルだけを編集したい場合があり、この動作が発生する可能性があるためです。

これを行う方法はありますか?

ありがとう

更新日:

これをより明確にするために、例を挙げます。近所の人が持っている車をリストしたテーブルがあるとします。4 つのセルがあります。

ID - カーカンパニー - モデル - 年式

ID は識別フィールド、CarCompany は自動車を製造する会社の名前、Model はモデルの名前、Year は年式のモデルです。

たとえば、次のレコードがあります。

0 - フォード - フォーカス - 2010

1 - キャデラック - エスカレード - 2004

2 - ランボルギーニ - ディアブロ - 2012

所有者は車を変更できます。彼らは年を変更できますが、他のセルは変更されません (現在の車の新しいバージョンに車を変更したため)、モデルを同じ年の別のものに変更できます。しかし、彼らが別の会社の車に乗り換えた場合は、モデルと年式を更新する必要があります (年式を変更する必要があると仮定しましょう)。したがって:

  • 年を変更する場合、変更する必要があるのはそのセルだけです
  • モデルを変更する場合、変更する必要があるのはそのセルだけです
  • ただし、CarCompany を変更する場合は、Model と Year を編集する必要があります。
4

1 に答える 1

1

あなたの問題が正しいことを理解したら、afterSaveCellコールバックまたは要件に適した他のものを使用できます(こちらを参照)。どの列が変更されているかをテストし、editCell明示的に呼び出して、依存するセルを編集することを提案できます。おそらく、ユーザーが実際に依存セルを正しい値に変更することを確認するために、追加のカスタム検証ルール (ここを参照) を使用できます。

更新:デモは、必要な動作を実装するためにコールバックeditCell内で呼び出す方法を示しています。afterSaveCellデモのコードの最も重要な部分を以下に示します。

var carCompanyEditingMode = false;

$("#list").jqGrid({
    ...
    afterSaveCell: function (rowid, cellname, value, iRow, iCol) {
        var $this = $(this), editedColName = this.p.colModel[iCol].name;
        if (editedColName === "carCompany") {
            setTimeout(function () {
                $this.jqGrid("editCell", iRow, iCol + 1, true);
            }, 50);
            carCompanyEditingMode = true;
            return;
        }
        if (carCompanyEditingMode && editedColName === "model") {
            setTimeout(function () {
                $this.jqGrid("editCell", iRow, iCol + 1, true);
            }, 50);
            return;
        }
        if (carCompanyEditingMode && editedColName === "year") {
            carCompanyEditingMode = false;
        }
    },
    beforeSelectRow: function () {
        // don't allow editing of another row if 
        // the carCompanyEditingMode is true
        return !carCompanyEditingMode;
    },
    afterRestoreCell: function (rowid, value, iRow, iCol) {
        var $this = $(this);
        if (carCompanyEditingMode) {
            // continue editing of the same cell
            setTimeout(function () {
                $this.jqGrid("editCell", iRow, iCol, true);
            }, 50);
        }
    }

});
于 2012-12-14T13:09:24.003 に答える