jqgridで初期化時にデータをロード(サーバーにリクエスト)したくない場合の対応
画面初期表示時には表を表示するためのパラメータが決まっておらず、
ユーザーが条件を入力したときに初めてサーバーが問い合わせ結果を返せる
といった場合はjqgrid側では初期パラメータで初回時にリクエストしない等の
パラメータはなく(hiddengridがそれに近かったが、キャプションエリアを出すことが
できなかった&表のエリアだけは初回から表示したかった)、ちょっと工夫してあげないと
いけなかった。
どうやったかというと
グリッド初回読み込み時には
datatypeをlocal,
mtype,urlを宣言しない状態でグリッドオブジェクトを初期化してやり、
jsonデータが読み込める状態になって
明示的に検索ボタン等が押された時に、
datatypeをjson,mtypeをPOST,urlをjson返却URLに変えてやるというやり方。
コードはこんな感じ。
$(function(){ // 初期化時にはdatatypeをlocal,mtype,urlを宣言しない。 $("#list").jqGrid({ datatype: 'local', // 後でjsonに変更する // mtype: 'POST, // 後で宣言する // url: '/json.php', // 後で宣言する // height: 125, colNames:['Date', 'Client', 'Amount','Tax','Total','Notes'], colModel:[ {name:'invdate',index:'invdate', width:90}, {name:'name',index:'name', width:100}, {name:'amount',index:'amount', width:80, align:"right"}, {name:'tax',index:'tax', width:80, align:"right"}, {name:'total',index:'total', width:80,align:"right"}, {name:'note',index:'note', width:150 } ], pager: '#pager', rowNum:5, viewrecords: true }); // button1ボタンが押されたときにdatatype,mtype,urlを変更、データをロードしなおす。 $('#button1').click(function(){ $('#list').setGridParam({page:"1",url: '/json.php',mtype: 'POST', datatype:'json'}); $('#list').trigger("reloadGrid"); }); });