グリッド直接編集サンプル
今回は、グリッドを直接編集するサンプルです。
簡単に説明すると、
- editRow で編集状態にします
- saveRow で更新します(サーバと通信します)
- キャンセルの場合は restoreRow で元に戻します
という手順になります。
saveRow では、指定したURLに対して、パラメータをPOSTで送信します。
具体的には、下のサンプルで言うと、
- 従業員番号:2 -> 4
- 名前:test2 -> test4
という風に編集して更新すると、
- URL:自分自身のURL
- POSTパラメータ:employee_no=4&id=2&name=test4
となります。
その際、WEBサーバからのレスポンスコードが200であれば、内容はどうあれ更新成功とみなされて、グリッドのデータも更新されます。
もちろんそれでは不便なので、自分でレスポンスを解析して、成功かどうかを判定することは可能です。(このサンプルはそこまでやってませんが)
あと注意点として、行IDも強制的に送信します。しかもパラメータ名は"id"固定です。今までカラム名に"id"を使用してきましたが非常にまずいので、急遽employee_no に変更しました。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Grid直接編集サンプル</title> <link rel="stylesheet" type="text/css" media="screen" href="css/jquery-ui-1.7.2.custom.css" /> <link rel="stylesheet" type="text/css" media="screen" href="css/ui.jqgrid.css" /> <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="js/i18n/jquery.jqGrid.min.js"></script> <script type="text/javascript" src="js/jquery.jqGrid.min.js"></script> <script type="text/javascript"> function begin_edit() { // 保存、キャンセルボタンを押せるようにし、編集ボタンを押せないようにする $("#btn1").attr("disabled",true); $("#btn2").attr("disabled",false); $("#btn3").attr("disabled",false); } function end_edit() { // 保存、キャンセルボタンを押せないようにし、編集ボタンを押せるようにする $("#btn1").attr("disabled",false); $("#btn2").attr("disabled",true); $("#btn3").attr("disabled",true); } jQuery(document).ready(function() { // ID という列名を使うと色々と弊害が出てくるので、employee_no に変更 jQuery("#list").jqGrid({ datatype: "local", colNames:['従業員番号', '名前'], colModel:[ {name:'employee_no', editable:true}, {name:'name' , editable:true}, ], caption: 'グリッドを直接編集する' }); var mydata = [ {employee_no:"1",name:"test1"}, {employee_no:"2",name:"test2"}, {employee_no:"3",name:"test3"}, ]; for(var i=0;i<=mydata.length;i++) jQuery("#list").addRowData(undefined,mydata[i]); // 編集中の行ID var editting_id = null; // 選択した行データを編集状態にする jQuery("#btn1").click( function() { var grid = jQuery("#list"); editting_id = grid.getGridParam("selrow"); if( !editting_id ) { alert("選択されてません"); return; } grid.editRow(editting_id); begin_edit(); }); // 編集内容を保存し、編集解除する $("#btn2").click( function() { if( !editting_id ) return; // とりあえず、どんなURLでもいいので、サーバから200レスポンスが得られるURLを指定する jQuery("#list").saveRow(editting_id, null, location.href); editting_id = null; end_edit(); }); // 編集内容を破棄し、編集解除する $("#btn3").click( function() { if( !editting_id ) return; jQuery("#list").restoreRow(editting_id); editting_id = null; end_edit(); }); end_edit(); }); </script> </head> <body> <table id="list" class="scroll" cellpadding="0" cellspacing="0"></table> <p><button id="btn1">選択中の行を編集する</button></p> <p><button id="btn2">保存</button></p> <p><button id="btn3">キャンセル</button></p> </body> </html>