In some cases in inline or form edit we need not to call every time tha data for the select that comes from the server. In order to reduce the server calls we can cache the data and use it after another calls.
To do this a chacheUrlData options should be set to true in editoptions
check the PHP tab for details
<?php
require_once '../../../../php/demo/tabs.php';
?>
<!DOCTYPE html>
<html>
<head>
<title>jqGrid PHP Demo</title>
<link rel="stylesheet" type="text/css" media="screen" href="../../../../css/jquery-ui.css" />
<link rel="stylesheet" type="text/css" media="screen" href="../../../../css/trirand/ui.jqgrid.css" />
<link rel="stylesheet" type="text/css" media="screen" href="../../../../css/ui.multiselect.css" />
<style type="text">
html, body {
margin: 0; /* Remove body margin/padding */
padding: 0;
overflow: hidden; /* Remove scroll bars on browser window */
font-size: 75%;
}
</style>
<script src="../../../../js/jquery.min.js" type="text/javascript"></script>
<script src="../../../../js/trirand/i18n/grid.locale-en.js" type="text/javascript"></script>
<script src="../../../../js/trirand/src/jquery.jqGrid.js" type="text/javascript"></script>
<script src="../../../../js/jquery-ui.min.js" type="text/javascript"></script>
<script src="../../../../js/trirand/jquery.jqGrid.min.js" type="text/javascript"></script> <script type="text/javascript">
$.jgrid.no_legacy_api = true;
$.jgrid.useJSON = true;
$.jgrid.defaults.width = "700";
</script>
</head>
<body>
<div>
<?php require_once("grid.php");?>
</div>
<br/>
<?php tabs(array("grid.php","customer.php","getcustomers.php"));?>
</body>
</html>
grid.php.
<?php
require_once '../../jq-config.php';
// include the jqGrid Class
require_once ABSPATH."php/PHPSuito/jqGrid.php";
// include the driver class
require_once ABSPATH."php/PHPSuito/DBdrivers/jqGridPdo.php";
// Connection to the server
$conn = new PDO(DB_DSN,DB_USER,DB_PASSWORD);
// Tell the db that we use utf-8
$conn->query("SET NAMES 'utf8'");
// Create the jqGrid instance
$grid = new jqGridRender($conn);
// Write the SQL Query
$grid->SelectCommand = 'SELECT OrderID, CustomerID, Freight, OrderDate, ShipCity FROM orders';
// set the ouput format to json
$grid->table = 'orders';
$grid->dataType = 'json';
// Let the grid create the model
$grid->setColModel();
// Set the url from where we obtain the data
$grid->setUrl('grid.php');
// Set some grid options
$grid->setGridOptions(array("rowNum"=>10,"rowList"=>array(10,20,30), "sortname"=>"OrderID","height"=>150));
// Change some property of the field(s)
$grid->setColProperty("OrderDate", array(
"formatter"=>"date",
"formatoptions"=>array("srcformat"=>"Y-m-d H:i:s","newformat"=>"m/d/Y"),
"search"=>false,
"editable"=>false
)
);
$grid->setColProperty("OrderID",array("editable"=>false));
$grid->setColProperty("ShipCity",array("editable"=>false));
// We need custom select since the select should be updated
// every time
$grid->setColProperty("CustomerID",array(
"edittype"=>"select",
"editoptions"=>array(
"dataUrl"=>"getcustomers.php",
"cacheUrlData"=>true
)
));
$grid->navigator = true;
//NOTE THE recreateForm
$grid->setNavOptions('navigator', array("del"=>false,"excel"=>false,"search"=>false,"refresh"=>false));
$grid->setNavOptions('edit', array("height"=>'auto',"dataheight"=>"auto","width"=>'auto', "recreateForm"=>true));
$grid->setNavOptions('add', array("height"=>'auto',"dataheight"=>"auto", "width"=>'auto', "recreateForm"=>true));
// Enjoy
$grid->renderGrid('#grid','#pager',true, null, null, true,true);
customer.php.
getcustomers.php.
<?php
ini_set("display_errors","1");
require_once '../../jq-config.php';
// include the jqGrid Class
//require_once ABSPATH."php/PHPSuito/jqGridUtils.php";
// include the driver class
require_once ABSPATH."php/PHPSuito/DBdrivers/jqGridPdo.php";
// Connection to the server
$conn = new PDO(DB_DSN,DB_USER,DB_PASSWORD);
// Tell the db that we use utf-8
$conn->query("SET NAMES utf8");
$s = "<select>";
$q = jqGridDB::query($conn,"SELECT CustomerID, CompanyName FROM customers ORDER BY CompanyName");
while($row= jqGridDB::fetch_num($q)) {
$s .= "<option value='".$row[0]."'>".$row[1]."</option>";
}
$s .= "</select>";
echo $s;