2015-08-25 46 views
0

這是我的代碼jqGrid。動態檢索jqgrid的列值

$("#grid").jqGrid({ 
         url:$url, 
         editurl:"serivce.php", 
         datatype: "json" , 
         mtype:"post", 
         colNames:["test"],        
         colModel:[ 
          {name:"test",index:"test", width:150,align:"center", editable:true, 
           edittype:"select", editoptions:{size:1, dataUrl:"../someurl.php?param1=parm } 
          }, 
         ], 
         rowNum:10, 
         rowList:[10,20,30], 
         add: { 
          top:30, 
          left:20 
         }, 
         edit:{ 
          top:30, 
          left:20 
         }, 
         jqModal: true, 
         pager: "#page", 
         sortname: "ID", 
         viewrecords: true, 
         sortorder: "ASC",        
         shrinkToFit: true, 
         height: "auto" 
        }); '; 



$("#grid").setGridParam({ondblClickRow: function(rowid) { 
           var rowData = jQuery("#grid").getRowData(rowid);          
            jQuery(this).jqGrid("editGridRow", rowid, 
            { closeAfterEdit:true, 
             beforeShowForm: function(form){ 
              // force the data value retrieve here 
             }, 
             afterSubmit:function() { $("#grid").jqGrid("setGridParam", {datatype: "json"}); 
                   return true; 
                   }  
            }); 
          } // end of ondblClickRow}); 
          }); ' ; 

的dataUrl的服務器PHP代碼:

$values = getWorkingValues($param); 
echo '<select>'; 
foreach($values as $value){ 
    echo "<option value='" . $value . "'>" .$value . "</option>"; 
} 
echo "</select>"; 

如何強制 「測試」 列中的值的檢索?
例如,每次網格打開進行編輯?
我使用的版本是jqGrid 3.6。 謝謝

+0

你目前的問題是什麼? dataUrl將不被調用?你需要發送'param1'這是不同的每一行?你有沒有緩存的問題(例如'dataUrl'將被加載一次,並且不會每次都被檢索到)?在jqGrid([免費jqGrid](https://github.com/free-jqgrid/jqGrid),[Guriddo jqGrid JS](http://guriddo.net/?page_id=103334)或舊的jqGrid版本< = 4.7)以及您使用的版本?您使用哪種編輯模式(表單編輯,內聯編輯或單元格編輯)? – Oleg

+0

謝謝奧列格。我的問題是值被緩存。我想強制在editGridRow時通過dataUrl更新值。我正在使用表單編輯。 – user2430607

+0

**您使用的是哪個版本的jqGrid?**您在哪裏啓動editGridRow?您使用的editGridRow的哪些選項?您使用哪個網頁瀏覽器進行測試?你在'dataUrl'的響應的HTTP頭部設置和緩存選項('Cache-Control')(請參閱你的服務器代碼)。你應該點擊你的問題下方的「編輯」鏈接,並修改/附加文本以獲得更多信息。 – Oleg

回答

1

您可以嘗試將recreateForm: true選項添加到選項editGridRow(接近closeAfterEdit:true)。

我會嚴格地建議你更新jqGrid。 jqGrid 3.6是7歲,這真的很web開發。當時有一個人剛剛發佈了IE4和IE5。現在不支持Web瀏覽器。所以你嘗試使用Web開發石器時代的版本。您甚至無法找到有關舊版本的文檔。我建議您更新到free jqGrid 4.9.2,您可以從GitHub,NuGet,npm下載或直接從CDN使用(請參閱the wiki article)。順便說一下,recreateForm選項的含義在jqGrid的不同版本中有所不同。如果你使用免費的jqGrid,那麼你將不需要使用recreateForm: true選項來解決問題。

A會額外建議您在dataUrl的服務器響應中設置Cache-Control: private, max-age=0 HTTP標頭。通過這種方式,您可以確保先前的請求不會在客戶端緩存,並且Web瀏覽器每次都會發出相應的Ajax請求。

+0

通過添加recreateFrom:true解決了我的問題。謝謝。 – user2430607

+0

@ user2430607:不客氣! – Oleg