簡體   English   中英

jqGrid:使用“單元格編輯”編輯多個單元格

[英]jqGrid: Edit more than one cell using Cell Editing

我有個問題。 我正在為jqGrid使用單元格編輯。 我不想為內聯編輯更改它,因為我需要保持這種方式,只允許一次編輯一個單元格。

關鍵是我有一個字段,在編輯之后,需要強制其他單元格進行編輯。 因此,如果用戶將第一個單元格更改為某個值,則需要打開這些單元格進行編輯。

有什么辦法嗎? 我已經嘗試過使用.jqGrid('editCell',...),但是那樣的話我一次只能用一個單元格來做。 而且我不能要求下一個必須編輯的單元格來強制編輯第三個單元格,因為用戶可能想單獨編輯第二個單元格,這可能會導致這種行為。

有什么辦法嗎?

謝謝

UPD

為了更清楚地說明這一點,我將舉一個例子。 假設您有一個表,列出了附近居民所擁有的汽車。 它具有4個單元:

ID-汽車公司-車型-年

其中ID是某些標識字段,CarCompany是制造汽車的公司的名稱,Model是模型的名稱,Year是年份的模型。

因此,例如,您有以下記錄:

0-福特-焦點-2010

1-凱迪拉克-Escalade-2004

2-蘭博基尼-暗黑破壞神-2012

車主可以更換汽車。 他們可以更改Year,而不應更改其他任何單元(因為他們將其汽車更改為當前汽車的較新版本),並且可以將同一年的另一模型更改為Model。 但是,如果他們要換另一家公司的汽車,則必須更新型號和年份(假設您必須更改年份)。 因此:

  • 如果您更改Year,那是您唯一需要更改的單元格
  • 如果您更改模型,那是您唯一需要更改的單元格
  • 但是,如果您更改CarCompany,則必須編輯Model和Year。

如果我了解正確的問題,則可以使用afterSaveCell回調或其他一些更適合您的要求的代碼(請參閱此處 )。 您可以測試修改了哪一列,並顯式調用editCell來建議編輯依賴的單元格。 可能您可以使用其他自定義驗證規則(請參閱此處 ),以確保用戶確實將從屬單元格修改為正確的值。

UPDATED該演示演示了如何在afterSaveCell回調內部調用editCell來實現所需的行為。 該演示代碼中最重要的部分將在下面找到:

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

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM