2013-05-07 102 views
0

請問我這些人,但我有這兩個問題。我希望你們可以幫助我。Jqgrid獲取我們輸入的值,並更改表格的可編輯屬性

這裏是我的代碼

jQuery("#VWWMODULE").jqGrid(
{ 
url:'loadstatic.php?q=2&t=CORE_VW_WMODULE', 
datatype: "json", 
mtype: "POST", 
colNames:['Id', 'From Range', 'To Range'], 
colModel: 
[ 
    { 
     name:'id', 
     index:'id', 
     width:7, 
     editable:true, 
     edittype:'text', 
     editrules:{required:true}, 
     editoptions:{maxlength:7, size:7}, 
     formoptions:{rowpos:1, elmprefix:' '}, 
     key:true 
    }, 
    { 
     name:'rangefrom', 
     index:'rangefrom', 
     width:7, 
     editable:true, 
     edittype:'text', 
     editrules:{required:true, number:true}, 
     editoptions:{maxlength:7, size:7}, 
     formoptions:{rowpos:6, elmprefix:' '} 
    }, 
    { 
     name:'rangeto', 
     index:'rangeto', 
     width:7, 
     editable:true, 
     edittype:'text', 
     editrules:{required:true, number:true, custom:true, custom_func:frtid}, 
     editoptions:{maxlength:7, size:7}, 
     formoptions:{rowpos:7,elmprefix:' '} 
    } 
] 
  1. ,你可以在「rangeto」我有一個自定義的驗證看到一部分。這個驗證實際上很簡單。它只需要檢查我們輸入的'rangeto'的值是否大於'rangefrom'的值。現在我怎麼能從'rangefrom'得到值,所以我可以將它與自定義驗證函數中'rangeto'的值進行比較?

  2. 我的第二個問題是關於index'id'。它用作表的主鍵。所以在編輯模式下不應該改變。我在添加模式時說,用戶可以隨意輸入它。但一旦提交,價值就不能改變。在編輯模式下,用戶仍然可以看到'id'值,但是由於它是可以使用的,他不能改變它。如何才能做到這一點?

編輯

好了,現在我有另一個問題。但這是一個簡單的問題。

  1. 如何在添加模式下調用自定義驗證函數?導致我的功能會給出錯誤信息,當編輯模式時,它不應該被稱爲

可以任何人請幫助我這3個問題,我有嗎?

編輯

解決了一些更多的解釋從here

+0

stackoverflow的目標是不提供幫助論壇有人解決你所有的問題。目標是*分享常見問題和答案(解決常見問題)*。因爲交換性問題是邪惡的。這些問題可能是不好的索引,所以其他人將無法找到解決方案。你應該在不同的問題中區分不同的問題。 – Oleg 2013-05-08 12:12:53

+0

我建議你使用'beforeCheckValues'回調,設置'id'字段只讀或隱藏'beforeShowForm'內(參見[答案](http://stackoverflow.com/a/3405961/315935)和[答案](http://stackoverflow.com/a/3952654/315935))。 – Oleg 2013-05-08 12:32:42

+0

對此感到抱歉。我只是想讓它更簡單,所以我不必創建新的問題,因此並不真正浪費服務器中的一些空間。在我提出問題之前,我還在文檔中進行了一些研究,並且已經搜索了一些類似的問題,但是無法得到正確的問題(正如您所說的錯誤索引),無法得到答案,或者我找到的問題是相似的但不是真的一樣,在這種情況下,我已經找到關於內場編輯的答案,但它不能真正解決我的問題。無論如何感謝您的答覆和答案,我會檢查出來 – 2013-05-10 03:24:56

回答

0

我想,你現在主要的問題在編輯後的網格只改變id

首先,寫出所有問題非常重要:使用哪種編輯模式,以及如果從服務器加載數據(datatype: "json"),是否使用loadonce: true

只能間接地假設您使用表單編輯模式,因爲您在colModel中使用formoptions選項。表單編輯有reloadAfterSubmit選項(請參見the documentation),其默認值爲true。這意味着jqGrid在成功提交一行編輯後重新加載網格的全部內容。該設置簡化了與服務器的接口。如果您使用默認選項,那麼您將不會遇到編輯id的問題,並且在編輯後正確排序數據也沒有問題。

如果你決定使用reloadAfterSubmit選項,那麼你必須做額外的工作。服務器應迴應新值id。在數據庫中保存數據的情況下,id通常將由數據庫生成生成。您必須執行afterSubmit回調,該回調應從服務器響應中解碼新的id並將其返回。

如果您使用內嵌編輯並需要更改id那麼我會轉發給您the answer。從示例中回調aftersavefunc包含修改id的代碼。

已更新:我看過here,您在三位論壇中提出了同樣的問題。我想很快從託尼的回答中評論一點。

每個添加或編輯表單都包含帶有數據的表格(另一個表格包含可在表單底部看到的按鈕)。前兩個表的最後一排大多是隱藏的,幷包含(或可以包含)的有用信息:

enter image description here

例如最後一行包含id="id_g"輸入字段。該行存在事件,您沒有列id(如在您的網格中)。因此$("#id_g").val()包含編輯行的rowid。添加對話框包含字符串"_empty"的地方。

更新2:如果你需要添加和編輯的形式顯示id場,但使其只讀你只需要使用readonly: 'readonly'屬性id列(見here)。接下來的問題:你應該使用recreateForm: true屬性添加和編輯表單。

我不建議你使用reloadAfterSubmit: true,但如果你確實需要使用,則應該從服務器(從savewmodule.php)新增加的行的id回報,你必須使用afterSubmit回調選項從服務器響應中獲取新的ID並以文檔方式返回(return [true, "", new_id];)。另外你必須在保存行之後設置網格的「id」列的內容。你應該修改id屬性postdata參數afterSubmit回調。