2012-04-09 73 views
2

我正在使用setColProp動態地將值加載到select編輯類型中。jqgrid setColProp不工作

我的價值觀成功加載每當我打電話:

loadComplete: function() { 
       $("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} }); 
      }, 

但是它只能在這裏,只有一次。如果我改變的contract_list價值,並嘗試通過調用

$("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} }); 
再次從任何地方

(從單擊按鈕,從afterSubmit,甚至重裝表)來更新的jqGrid它什麼都沒有。

有什麼我做錯了嗎?

編輯: 下面是我想要做的更好的解釋。

我有一個jqGrid表ID爲#profile_table

這是jqGrid的代碼colModel的一部分:

colModel:[ 
       {name:'contract_num',index:'contract_num', editable: true, hidden: false, width:30, edittype: "select", editrules: {required: true}}, 
] 

最初在編輯contract_num編輯字段/添加的形式在其select框中沒有值。我從表格創建之前創建的名爲contract_list的javascript變量加載初始值。我最初加載這些值使用:

loadComplete: function() { 
       $("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} }); 
      }, 

這工作得很好,但它是可能的,只要用戶更改該表顯示在頁面上別的東西contract_list值會發生變化。所以我正在嘗試動態更新select框中的contract_num字段內的選項,該字段位於此表的編輯/添加表單內。我成功更改了contract_list中的值,但無法將實際的select框更新爲新值。

我試圖通過調用來更新它:

$("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} }); 

,然後重裝每當有人改變了值contract_list電網,但該表沒有被更新。

+0

它,你描述是非常重要的該問題更詳細。如何使用editoptions.value?例如,如果在*編輯模式下有幾行*選擇不會自動過期,但下一行將開始編輯將使用新的設置。如果您使用'formatter:'select''和'editoptions.value',您必須重新加載grig以將更改應用到網格主體中。你能包含更完整的代碼示例嗎? – Oleg 2012-04-09 09:05:58

+0

我增加了更多的代碼和更好的解釋,我希望你現在能夠理解我的問題,謝謝 – Sandoichi 2012-04-09 22:19:26

+0

對不起,但更新的部分不清除任何東西。你寫道:「我無法得到實際的選擇框更新爲新的值」。什麼是「實際選擇框」。只有在編輯**某個單元格或行時,選擇才存在**(我仍然不知道您使用哪種編輯模式)。爲什麼在'setColProp'之後重新加載網格?目前你在編輯模式下有一排嗎?如果答案是「沒有行」,你不需要做任何重新加載。爲什麼你在'loadComplete'中放置'setColProp'?我不知道是誰更改'contract_list',當你這樣做,你是如何做到這一點的。你是否在某個事件處理程序中這樣做? – Oleg 2012-04-10 10:05:12

回答

4

我認爲你的主要問題將被解決,如果你使用recreateForm: true選項的表單編輯(見here使用的一個例子)。我建議您在之前將您的設置設置爲默認您撥打navGrid(請參閱here的相應代碼)。

此外,根據您在評論中寫的信息,我認爲您應該更好地使用dataUrl而不是的value。因此,jqGrid可以在創建編輯表單時直接從服務器加載值列表。有時使用buildSelect是有用的。它可以幫助您以例如JSON格式從服務器提供數據,並根據buildSelect內部的服務器數據構建<select><option value="...">...</option>...</select> HTML片段。此外,它可能需要設置ajaxSelectOptions: { cache: false } jqGrid的選項(參見herehere)或強制相對於HTTP標頭"Cache-Control: private, max-age=0"dataUrl以前的服務器響應的重新驗證(見herehere

+0

使用'recreateForm:true'並沒有幫助,但是我改變我的代碼使用'dataUrl',現在'select'字段在每次打開編輯表單時都通過ajax重新填充,並顯示更新後的值。謝謝! – Sandoichi 2012-04-10 23:34:53