2012-12-14 72 views
0

我遇到問題。我正在使用jqGrid的單元格編輯。我不希望爲了內嵌編輯而改變它,因爲我需要保持這種狀態,只允許一次編輯一個單元格。jqGrid:使用單元格編輯編輯多個單元格

問題是我有一個字段,編輯後需要強制編輯其他單元格。所以,如果用戶將第一個單元格更改爲特定值,我需要這些單元格以進行編輯。

有沒有辦法做到這一點?我曾嘗試使用.jqGrid('editCell',...),但這種方式一次只能用一個單元格來完成。而且我不能要求下一個要編輯的單元格來強制編輯第3個和最後一個單元格,因爲可能發生用戶想單獨編輯第2個單元格的情況,這會導致此行爲。

任何方式來做到這一點?

感謝

UPD

爲了使這更清晰,我舉一個例子。假設你有一張桌子,列出你附近的人有的汽車。它有4個單元:

ID - CarCompany - 模式 - 年

其中id是一些標識字段,CarCompany是製造汽車的公司的名稱,型號是模型的名稱和新年是一年的模式。

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

0 - 福特 - 福克斯 - 2010

1 - 凱迪拉克 - 凱雷德 - 2004年

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

業主可以更換汽車。他們可以改變年份,不應該改變任何其他單元格(因爲他們改變了他們的汽車爲他們當前汽車的新版本),他們可以在同一年改變模型爲另一個。但是,如果他們爲另一家公司更換汽車,則必須更新型號和年份(假設您必須更改年份)。因此:

  • 如果更改年份,那就是你必須改變
  • 如果更改模型中唯一的細胞,這就是你必須改變
  • 唯一細胞,但如果更改CarCompany,你必須編輯型號和年份。

回答

1

如果我理解你的問題是正確的,你可以使用afterSaveCell回調函數或其他更好的符合你的要求的函數(見here)。您可以測試修改了哪一列,並明確呼叫editCell以建議編輯依賴的單元格。可能您可以使用額外的自定義驗證規則(請參閱here)以確保用戶真正將相關單元修改爲正確的值。

修訂The demo顯示瞭如何調用editCellafterSaveCell回調內部實現你需要的行爲。演示代碼中最重要的部分將在下面找到:

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

}); 
+0

該方法的問題是我一直只能用它來一次打開一個單元。當滿足條件時,我需要打開兩個單元格。我可以連接編輯單元的調用,因爲其他單元格可以單獨編輯,而無需採用這種方式。 – Heathcliff

+0

@希思克利夫:對不起,但我不能跟着你。如果直接從一列修改單元格後(或者如果用戶在單元格中輸入特定值),用戶將不得不修改行中的第二個單元格,看起來像您原來的要求一樣。關於'afterSaveCell',你可以捕獲第一個單元格的編輯結束,並用第二個單元格調用editCell。 – Oleg

+0

如果我用第一個單元格(要求用戶編輯兩個其他單元格的單元格)調用'editCell'編輯第二個單元格,我將無法編輯第三個單元格。我無法在第二個單元格的afterSaveCell事件中調用'editCell',因爲該單元格的單獨版本不需要用戶編輯第三個單元格;如果用戶編輯了第一個單元格,這就是它會編輯第二個單元格的原因。除非在第二個單元格的afterCellEvent中有我能做的事情要知道,如果用戶編輯了第一個單元格,那就是他編輯第二個單元格的原因,我不能使用它。 – Heathcliff