2015-08-25 44 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