寫道
cell editing: 編輯一個Grid的cell
inline editing: 編輯同一row的幾個cell
form editing: 創建一個form表單在外部更新grid內容
在jqGrid中主要通過以下colModel參數來實現:
- editable: true|false 表示該cell是否支持可編輯,默認為false。對hidden屬性默認不支持編輯,當然也可以通過其他方式來實現
- edittype:簡單説就是當前cell在編輯狀態下是按照哪種input類型,因為在編輯下會轉化為<input type="text/password..."../>,於是支持的輸入類型當然包括:'text', 'textarea', 'select', 'checkbox', 'password', 'button', 'image', 'file'還有custom,默認為text
- editoptions:一個數組用來設置edittype屬性,通過該屬性來限定input中各屬性的值,比如:
1. edittype="text", editoptions: {size:10, maxlength: 15}
2. edittype="textarea", editoptions: {rows:"2",cols:"10"}
3. edittype="textarea",editoptions: { value:"Yes:No" }
4. edittype="select",editoptions: { value: “FE:FedEx; IN:InTime; TN:TNT” }//對於多選的支持:editoptions: {multiple:true, size:3... }
5. //當edittype為custom時需要有兩個函數,一個用來創建該元素(custom_element另外一個對其賦值(custom_value),如
6. edittype:'custom', editoptions:{
7. function(value, options){
8. },
9. function(elem, operation, value){
10. }
11. }
- editrules:用來校驗用户輸入值,比如我們常見的長度、必填、email、數字等校驗。如editrules:{maxValue:20, required:true, number:true},提供了一系列常見的驗證格式,具體見http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules。這裏舉例來描述一個custom實例
1. editrules:{custom:true, custom_func: function(value, colname){
2. if (value < 0 || value >20) {
3. return [false,"Please enter value between 0 and 20"];
4. else{
5. return [true,""];
6. }
7. }}
- formoptions:用於上面的form editing,用來對form表單排序或在表單前面或後面加上一個元素。如對必填在前面加上*號等。如果要使用該元素,推薦對所有editable的元素都加上該屬性
1、cell editing
是對一個grid的row中一個單獨的cell進行編輯,支持ajax和本地的方式修改,同時對cell的編輯支持事件主要是[Enter]已經上下左右等鼠標事件來觸發,同時還有對編輯事件本身,如beforeEditCell、afterEditCell等。
在cell編輯中,主要通過jqGrid的options參數來設置:
1. {
2. 'cellEdit' : true,
3. 'cellsubmit' : 'remote|clientArray',
4. 'cellurl' : '/url/to/handling/the/changed/cell/value'
5. }
其實這個cellEdit限制挺多,如果cellEdit=true即支持celEdit時jqGrid的onSelectRow事件都不能使用。就我自己來説沒有在實際業務常見中使用,這裏不再多説,具體見:
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:cell_editing
2、inlineEditing
當用户在對grid的一行做選擇(如grid的onSelectRow、ondblClickRow事件觸發時),當前grid進入可編輯狀態。以下是一個例子,對一些常用的可編輯項做了説明
1. var datas = [
2. {"id":1, "name":"name1", "date":"2012-08-18 11:11:11", "price":123.1, "email":"abc@163.com", "amount":1123423, "gender":"1", "type":"0"},
3. {"id":2, "name":"name2", "date":"2012-08-18 11:11:11", "price":1452.2, "email":"abc@163.com", "amount":12212321, "gender":"1", "type":"1"},
4. {"id":3, "name":"name3", "date":"2012-08-18 11:11:11", "price":125454, "email":"abc@163.com", "amount":2345234, "gender":"0", "type":"0"},
5. {"id":4, "name":"name4", "date":"2012-08-18 11:11:11", "price":23232.4, "email":"abc@163.com", "amount":2345234, "gender":"1", "type":"2"},
6. {"id":5, "name":"name5", "date":"2012-08-18 11:11:11", "price":473454, "email":"abc@163.com", "amount":5234534, "gender":"0", "type":"0"},
7. {"id":6, "name":"name6", "date":"2012-08-18 11:11:11", "price":34563, "email":"abc@163.com", "amount":2345342, "gender":"1", "type":"1"}
8. ];
1. colModel:[
2. 'id', index:'id'},
3. 'name', index:'name', editable:true, edittype:"text", editrules:{required: true},editoptions:{size:16, maxlength: 15}},
4. 'date', index:'date', editable:true, edittype:"text", editrules:{date: true},editoptions:{ size: 10, maxlengh: 10,
5. function(element) {
6. 'yy-mm-dd'});
7. }
8. }},
9. 'price', index:'price', editable:true, edittype:"text", editrules:{required: true, number: true}},
10. 'email', index:'email', editable:true, edittype:"text", editrules:{required: true, email: true}},
11. 'amount', index:'amount', editable:true, edittype:"text", editrules:{required: true, number: true, maxValue:20}},
12. 'gender', index:'gender', editable:true, edittype:"checkbox", editrules:{value:"Yes:No"}},
13. 'type', index:'type', editable:true, edittype:'select', formatter:'select', editoptions:{value:"0:現貨;1:可配貨;2:無貨"}}
14. ],
以上是編輯的設置,主要包含了幾種可編輯的方式:
1、
edittype="text",並設置必填、size和maxlength的限制、email、number、maxValue等校驗,在編輯時將對數據的有效性進行校驗
2、
edittype="text",對datepicker控件的支持,需要引入jquery-ui和國際化jquery.ui.datepicker-zh-CN.js的支持
3、
edittype="checkbox",對cell中的值進行checkbox轉換,並設置默認值的設置
4、
edittype="select",配合formatter的使用,設置了可選擇的下拉列表editoptions:{value:"0:現貨;1:可配貨;2:無貨"}}
下面在對gridRow的雙擊事件觸發編輯:
1. ondblClickRow: function(id){
2. if(id && id !== lastsel){
3. var rowData = $("#jqGridId").jqGrid("getRowData", id);
4. '#jqGridId').jqGrid('restoreRow',lastsel);
5. '#jqGridId').jqGrid('editRow',id,{
6. true, //這裏按[enter]保存
7. "jq/save.action",
8. "POST",
9. true,
10. extraparam: {
11. "ware.id": rowData.id,
12. "ware.warename": $("#"+id+"_name").val(),
13. "ware.createDate": $("#"+id+"_date").val(),
14. "ware.number": $("#"+id+"_amount").val(),
15. "ware.valid": $("#"+id+"_type").val()
16. },
17. function(rowid){
18. console.log(rowid);
19. },
20. function(response){
21. "save success");
22. return true;
23. },
24. function(rowid, res){
25. console.log(rowid);
26. console.log(res);
27. }
28. });
29. }
30. }
這裏用了innerEdit的editRow方法:
1. jQuery("#grid_id").jqGrid('editRow',rowid, keys, oneditfunc, succesfunc, url, extraparam, aftersavefunc,errorfunc, afterrestorefunc);
1. jQuery("#grid_id").jqGrid('editRow',rowid, {
2. "keys" : false,
3. "oneditfunc" : null,
4. "successfunc" : null,
5. "url" : null,
6. "extraparam" : {},
7. "aftersavefunc" : null,
8. "errorfunc": null,
9. "afterrestorefunc" : null,
10. "restoreAfterError" : true,
11. "mtype" : "POST"
12. });
這裏對以上各個參數的意思做一個簡單的描述
- rowid:當前編輯的rowid
- succesfunc:如果定義了改函數,將會在請求成功調用後立即返回,該函數簽名包括server返回的數據。同時該函數需要返回tue/false
- url: 如果定義了改值,將會覆蓋jqGrid中的editurl(當然,如果沒有url和editurl是會報錯的)。如果url="clientArray" 那麼就不會向server端觸發請求,可在後期手動調用修改
- extraparam:請求參數列表{name:value, name:value},將會append到requestData中向server端發送
- aftersavefunc:如果定義了改函數,將會在數據向server端保存後立即調用,該函數接受rowid、response參數。同樣如果是上面的url="clientArray"該函數同樣執行
- errorfunc:如果定義了改函數,將會在數據向server端保存後調用,該函數接受rowid、response參數
- afterrestorefunc:如果定義了改函數,將在restoreRow後調用,接受rowid作為參數
在 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing 中對於innerEdit主要有以下幾個方法:
寫道
editRow //在用户出發edit事件時調用該方法
saveRow //用户不需要調用該方法,在edit時會自動調用
restoreRow //回滾當前editRow
addRow //新增row
inlineNav
下面這個例子是對jqGrid新增一行並可編輯狀態:
1. $("#addBtn").bind("click", function() {
2. "#jqGridId").jqGrid('addRow',{
3. "new_row",
4. initdata : {},
5. "first",
6. true,
7. true,
8. addRowParams : {extraparam:{
9.
10. }}
11. });
12. //當前新增id進入可編輯狀態
13. '#jqGridId').jqGrid('editRow','new_row',{
14. true, //這裏按[enter]保存
15. "jq/save.action",
16. "POST",
17. true,
18. extraparam: {
19. },
20. function(rowid){
21. console.log(rowid);
22. },
23. function(response){
24. "save success");
25. return true;
26. },
27. function(rowid, res){
28. console.log(rowid);
29. console.log(res);
30. }
31. });
32.
33. });
3、FormEditing支持彈出窗的形式對grid的數據查看、新增、編輯、刪除和查找,主要包含以下幾個方法:
查找:searchGrid
編輯:editGridRow:
調用方式如下:
1. $("#grid_id").jqGrid('editGridRow', rowid, {properties} );
新增:editGridRow
1. $("#grid_id")..jqGrid('editGridRow', "new", properties );
查看:viewGridRow
刪除: delGridRow