easyui實現datagrid行內編

easyui的datagrid行內編輯對於修改信息而言比較方便直觀,下面舉例說明: 

需求說明: 
在行內編輯員工狀態 
 

一、編輯jsp 
Html代碼  收藏代碼
  1. ...  
  2.                <a href="#" id="save" onclick="obj.save()" class="easyui-linkbutton" iconCls="icon-save" plain="true">保存</a>  
  3.                <a href="#" id="redo" onclick="obj.redo()" class="easyui-linkbutton" iconCls="icon-redo" plain="true">取消編輯</a>  
  4.            </form>  
  5. ...  


二、編輯js 
說明: 
1.根據需求,除了status列,其它列均不要求被編輯,故設置readonly:'true',disabled:true,禁止其被編輯。 
2.對obj對象設置editRow的意義在於限制用戶只能對一行進行修改操作,即在this.editRow == undefined前提下進行修改。 
3.$('#dg').datagrid('beginEdit',index);是修改操作的開始,$('#dg').datagrid('endEdit',this.editRow);結束脩改。需注意的是,只有提交的信息通過驗證(如果存在的話)才能結束脩改。結束修改後會進入datagrid的onAfterEdit方法,以提交至控制器。 

影音先鋒電影 http://www.iskdy.com/ 
Js代碼  收藏代碼
  1. obj = {  
  2.             //編輯行屬性  
  3.             editRow:undefined,  
  4.             //保存  
  5.             save:function(){  
  6.                 //結束當前編輯行.注:1.只有填寫的信息通過驗證後才能結束編輯.2.結束編輯後進入datagrid的onAfterEdit方法。  
  7.                 $('#dg').datagrid('endEdit',this.editRow);  
  8.             },  
  9.             //取消  
  10.             redo:function(){  
  11.                 this.editRow = undefined  
  12.                 $('#dg').datagrid('rejectChanges')//回滾已編輯數據  
  13.             },  
  14.             //datagrid行內修改用戶狀態。index:當前行索引值。  
  15.             editStatus:function(index){  
  16.                 //獲取選擇行  
  17.                 var rows = $('#dg').datagrid('getSelections');  
  18.                 if(currUserStatus!=0){  
  19.                     $.messager.alert('警告''您不是管理員,無權執行此操作!''warning');  
  20.                 }else{  
  21.                     //修改操作需選中一行  
  22.                     if(rows.length == 1 ){  
  23.                         //如果已有編輯行,則關閉當前編輯行  
  24.                         if(this.editRow != undefined) $('#dg').datagrid('endEdit',this.editRow);  
  25.                         //如果未有編輯行,則進行編輯  
  26.                         if(this.editRow == undefined){  
  27.                             //設置當前行爲編輯狀態  
  28.                             $('#dg').datagrid('beginEdit',index);  
  29.                             //將當前行索引值賦給obj的editRow  
  30.                             this.editRow = index;  
  31.                             //取消選擇當前行  
  32.                             $('#dg').datagrid('unselectRow',index);  
  33.                         }  
  34.                     }else{  
  35.                         $.messager.alert('警告''修改必須選中僅且一行!''warning');  
  36.                     }  
  37.                 }  
  38.             },  
  39.             ...  
  40.               
  41.     }  
  42. ...  
  43. $('#dg').datagrid({  
  44.         //條紋  
  45.         striped:true,   
  46.         //標題  
  47.         title:'用戶管理',  
  48.         //提交的url地址  
  49.         url:'emplAction!listEmpl.action',  
  50.         //允許收縮數據  
  51.         collapsible:'true',  
  52.         //分頁  
  53.         pagination:'true',  
  54.         //自適應  
  55.         fit:'true',  
  56.         //默認頁容量  
  57.         pageSize:'10',  
  58.         //分頁工具位置  
  59.         pagePosition:'top',  
  60.         //列自適應  
  61.         fitColumns:'true',  
  62.         //顯示編號  
  63.         rownumbers:'true',  
  64.         //排序  
  65.         sortable:'true',  
  66.         sortName:'id',  
  67.         //主鍵  
  68.         idField:'id',  
  69.         ...  
  70.         //在datagrid中進行添加或修改操作。注:當前業務沒有在datagrid中“添加操作”的需求,只有更新操作,故省去了“添加操作”的判定。  
  71.         onAfterEdit:function(rowIndex,rowData,changes){  
  72.             var updated = $('#dg').datagrid('getChanges','updated');  
  73.             var url = '';  
  74.             //如果選擇了修改,但實際未做任何改變,則直接返回false  
  75.             if(updated.length==0){  
  76.                 obj.editRow = undefined;  
  77.                 return false  
  78.             }  
  79.             //修改用戶  
  80.             if(updated.length>0){  
  81.                 url='emplAction!editStatus.action';  
  82.             }  
  83.             //ajax提交,rowData是行數據  
  84.             $.ajax({  
  85.                 timeout:1000,//超時時間設置,單位:毫秒  
  86.                 type:'post',  
  87.                 url:url,  
  88.                 data:{  
  89.                     row:rowData,  
  90.                 },  
  91.                /* beforeSend:function(){ 
  92.                     console.log("提交前..") 
  93.                     console.log(rowData); 
  94.                     console.log(url); 
  95.                     $('#dg').datagrid('loading'); 
  96.                 },*/  
  97.                 success:function(data){  
  98.                     if(data){  
  99.                         $('#dg').datagrid('loaded');  
  100.                         $('#dg').datagrid('load');  
  101.                         $('#dg').datagrid('unselectAll');  
  102.                         //當前行結束編輯  
  103.                         $('#dg').datagrid('endEdit',obj.editRow);  
  104.                         $.messager.show({  
  105.                             title:'提示',  
  106.                             msg:data,  
  107.                         })  
  108.                         obj.editRow = undefined;  
  109.                     }  
  110.                 },  
  111.                 complete:function(XMLHttpRequest,status){  
  112.                     if(status=='timeout'){  
  113.                         alert('修改失敗,超時..')  
  114.                     }  
  115.                 },  
  116.                 error:function(XMLHttpRequest,errorThrown){  
  117.                     if(errorThrown=='408'){  
  118.                         alert('修改失敗,超時..')  
  119.                     }  
  120.                 }  
  121.                   
  122.             })  
  123.         },  
  124.         //列字段  
  125.         columns:[[  
  126.                   {  
  127.                       field:'ck',  
  128.                       checkbox:true  
  129.                   },  
  130.                   {  
  131.                       field:'eid',  
  132.                       title:'用戶編號',  
  133.                       height:30,  
  134.                       width:100,  
  135.                       align:'center',  
  136.                       sortable:'true',//排序  
  137.                       readonly:'true',  
  138.                       disabled:true//禁止編輯  
  139.                       /*editor:{ 
  140.                           type:'numberbox', 
  141.                           options:{ 
  142.                               required:true, 
  143.                               disabled:true//禁止編輯 
  144.                           } 
  145.                       }*/  
  146.                   },  
  147.                   {  
  148.                       field:'ename',  
  149.                       title:'用戶名',  
  150.                       width:100,  
  151.                       height:30,  
  152.                       align:'center',  
  153.                       readonly:'true',  
  154.                       disabled:true  
  155.                   },  
  156.                   {  
  157.                       field:'hiredate',  
  158.                       title:'入職時間',  
  159.                       width:100,  
  160.                       height:30,  
  161.                       align:'center',  
  162.                       readonly:'true',  
  163.                       disabled:true  
  164.                   },  
  165.                   {  
  166.                       field:'jname',  
  167.                       title:'職位描述',  
  168.                       width:100,  
  169.                       height:30,  
  170.                       align:'center',  
  171.                       readonly:'true',  
  172.                       disabled:true  
  173.                   },  
  174.                   {  
  175.                       field:'dname',  
  176.                       width:100,  
  177.                       height:30,  
  178.                       title:'所屬部門',  
  179.                       align:'center',  
  180.                       readonly:'true',  
  181.                       disabled:true  
  182.                   },  
  183.                   {  
  184.                       field:'status',  
  185.                       width:100,  
  186.                       height:30,  
  187.                       title:'狀態',  
  188.                       align:'center',  
  189.                       editor:{//編輯選項  
  190.                           type:'combobox',  
  191.                           options:{  
  192.                               url:"emplAction!getJobStatusList.action",//請求地址  
  193.                               required:true,  
  194.                               panelHeight: 'auto',  
  195.                               valueField:'jsid',//下拉框的值  
  196.                               textField:'status'//下拉框顯示的文本  
  197.                           }  
  198.                       }  
  199.                             
  200.                   },  
  201.                   {  
  202.                       field:'process',  
  203.                       title:'操作',  
  204.                       width:150,  
  205.                       height:30,  
  206.                       align:'center',  
  207.                       //格式化列值(設置列值在頁面的顯示樣式)  
  208.                       formatter:function(value,row,index){  
  209.                           return "<a href='javascript:obj.editStatus("+index+")'>修改狀態</a>"  
  210.                           +"  <a href='javascript:obj._delete("+row.eid+")'>刪除</a>"  
  211.                       }  
  212.                   }  
  213.                   ...  
  214.         ]],  
  215.           
  216.     })  

倫理片 http://www.dotdy.com/
三、編輯控制器 
Java代碼  收藏代碼
  1. //獲取職位信息  
  2.     public void getJobStatusList() throws IOException{  
  3.            resp.setCharacterEncoding("UTF-8");  
  4.            jobStatus=jobStatusService.listJobStatus();  
  5.            List<Map<String,String>> list = new ArrayList<>();  
  6.            Map<String,String> map = null;  
  7.            if(jobStatus.size()!=0){  
  8.                for (int i = 0; i < jobStatus.size(); i++) {  
  9.                    map = new HashMap<String, String>();  
  10.                    map.put("jsid", String.valueOf(jobStatus.get(i).getJsid()));  
  11.                    map.put("status", jobStatus.get(i).getStatus());  
  12.                    list.add(map);  
  13.                }  
  14.            }  
  15.            String s = JSON.toJSONString(list);  
  16.            PrintWriter out = resp.getWriter();  
  17.            out.println(s);  
  18.     }  
  19.     //修改用戶狀態  
  20.     public void editStatus()  
  21.             throws IOException {  
  22.        resp.setCharacterEncoding("UTF-8");    
  23.            //獲取提交的datagrid中的行數據  
  24.        int eid = Integer.parseInt(req.getParameter("row[eid]"));  
  25.        int status = Integer.parseInt(req.getParameter("row[status]"));  
  26.        boolean b = false;  
  27.        b = empService.editStatus(status, eid);  
  28.        PrintWriter out = resp.getWriter();  
  29.        if(b){  
  30.             out.print("修改成功!");  
  31.        }else{  
  32.             out.print("修改失敗!");  
  33.        }  
  34.     }  


大功告成,效果如下: 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章