• jQqery EasyUI dategrid行中多列数据的可编辑操作


        最近的项目中需要在前台dategrid列表中直接修改某些列的数据,并且修改后的数据需要不通过后台而自动更新在列表中。

        带着这一问题开始寻找实现的思路,首先想到的就是去jQqery EasyUI官网找例子,看看有没有类似于这种的功能。当然,官网提供了两种:一是编辑修改datagrid中的某一个列的值;二是编辑修改datagrid中的某一行的值(demo网址:http://www.jeasyui.com/tutorial/datagrid/datagrid12.php)。

        效果图如下:

        看到这两种demo后,首先肯定的是我想要的功能是可以实现的,通过研究这两种demo的原理就可以实现我想要的功能效果。编辑行的demo写的很简洁,封装了几个小方法,仔细研究一下很容易发现,实现这个功能的主要核心部分主要有以下几点:

        1.初始化datagrid的时候在需要编辑的列中,设置editor,其中type将决定编辑状态下输入数据的格式,例如:

        {field:'unitcost',title:'Unit Cost',80,align:'right',editor:'numberbox'},

        {field:'listprice',title:'List Price',80,align:'right',editor:{type:'numberbox',options:{precision:1}}}。

        2.添加点击响应方法,在这里用的是onClickCell方法。在方法内部进行是否编辑的逻辑判断,完整代码贴在后边。

        3.加上结束编辑的响应方法onAfterEdit,这个方法主要做结束编辑,更新datagrid的操作。

      1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      2 <html>
      3 <head>
      4     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      5     <meta name="keywords" content="jquery,ui,easy,easyui,web">
      6     <meta name="description" content="easyui help you build your web page easily!">
      7     <title>DataGrid inline editing - jQuery EasyUI Demo</title>
      8     <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/default/easyui.css">
      9     <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/icon.css">
     10     <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/demo/demo.css">
     11     <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
     12     <script type="text/javascript" src="http://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
     13     <script>
     14         var products = [
     15             {productid:'FI-SW-01',name:'Koi'},
     16             {productid:'K9-DL-01',name:'Dalmation'},
     17             {productid:'RP-SN-01',name:'Rattlesnake'},
     18             {productid:'RP-LI-02',name:'Iguana'},
     19             {productid:'FL-DSH-01',name:'Manx'}
     20             
     21         ];
     22         var _index=-1;//记录编辑行号
     23         var _flag=false;//记录是否处于编辑状态
     24         $(function(){
     25             $('#tt').datagrid({
     26                 title:'Editable DataGrid',
     27                 iconCls:'icon-edit',
     28                 660,
     29                 height:250,
     30                 singleSelect:true,
     31                 idField:'itemid',
     32                 url:'data/datagrid_data.json',
     33                 columns:[[
     34                     {field:'itemid',title:'Item ID',60},
     35                     {field:'productid',title:'Product',100,
     36                         formatter:function(value){
     37                             for(var i=0; i<products.length; i++){
     38                                 if (products[i].productid == value) return products[i].name;
     39                             }
     40                             return value;
     41                         },
     42                         editor:{
     43                             type:'combobox',
     44                             options:{
     45                                 valueField:'productid',
     46                                 textField:'name',
     47                                 data:products,
     48                                 required:true
     49                             }
     50                         },
     51                         styler: function (value, row, index) {
     52                                 return 'background-color:#FFE4E1;color:red;';
     53                         }
     54                     },
     55                     {field:'listprice',title:'List Price',80,align:'right',editor:{type:'numberbox',options:{precision:1}},
     56                     styler: function (value, row, index) {
     57                                 return 'background-color:#FFE4E1;color:red;';
     58                         }
     59                     },
     60                     {field:'unitcost',title:'Unit Cost',80,align:'right',editor:'numberbox',
     61                     styler: function (value, row, index) {
     62                                 return 'background-color:#FFE4E1;color:red;';
     63                         }},
     64                     {field:'attr1',title:'Attribute',180,editor:'text',
     65                     styler: function (value, row, index) {
     66                                 return 'background-color:#FFE4E1;color:red;';
     67                         }
     68                     },                    
     69                 ]],
     70                 onClickCell: function (index, field, value) {
     71                 var ed;
     72 
     73                 if (field != "itemid" ) {//先排除不需要编辑的列
     74 
     75                     if (field == "productid") {//依次判断当前编辑的是哪一列
     76 
     77                         if (_flag) {//如果上一次编辑状态未结束,先结束上一次编辑
     78 
     79                             $(this).datagrid('endEdit', _index);//结束编辑
     80                         }
     81                         $(this).datagrid('beginEdit', index);//开始本次编辑
     82                         ed = $(this).datagrid('getEditor', { index: index, field: field });
     83                         $(ed.target).focus();
     84                         _index = index;  //记录本次编辑的行号
     85                         _flag = true;    //将编辑状态设置为true
     86                     }
     87                     else if (field == "listprice") {
     88 
     89                         if (_flag) {
     90 
     91                             $(this).datagrid('endEdit', _index);
     92                         }
     93                         $(this).datagrid('beginEdit', index);
     94                         ed = $(this).datagrid('getEditor', { index: index, field: field });
     95                         $(ed.target).focus();
     96                         _index = index;
     97                         _flag = true;
     98                     }
     99                     else if (field == "unitcost") {
    100 
    101                         if (_flag) {
    102 
    103                             $(this).datagrid('endEdit', _index);
    104                         }
    105                         $(this).datagrid('beginEdit', index);
    106                         ed = $(this).datagrid('getEditor', { index: index, field: field });
    107                         $(ed.target).focus();
    108                         _index = index;
    109                         _flag = true;
    110                     }
    111                     else if (field == "attr1") {
    112 
    113                         if (_flag) {
    114 
    115                             $(this).datagrid('endEdit', _index);
    116                         }
    117                         $(this).datagrid('beginEdit', index);
    118                         ed = $(this).datagrid('getEditor', { index: index, field: field });
    119                         $(ed.target).focus();
    120                         _index = index;
    121                         _flag = true;
    122                     }
    123                     else if (_flag) {
    124 
    125                         $(this).datagrid('endEdit', _index);
    126                     }
    127                 }
    128                 else if (_flag) {
    129                 
    130                     $(this).datagrid('endEdit', _index);
    131                 }              
    132             },
    133             onAfterEdit: function (index, row) { //执行endEdit时调用该方法,结束编辑状态
    134                 $(this).datagrid('updateRow', {  //更新当前列的内容
    135                     index: index,
    136                     row: {}
    137                 });
    138                 _index = -1;   //编辑结束后,将记录的编辑行号置为-1
    139                 _flag = false;  //编辑结束后,将编辑状态置为false
    140             }
    141             });
    142         });    
    143         function insert(){
    144              if (_flag) {
    145                     $(this).datagrid('endEdit', _index);
    146               }
    147             var row = $('#tt').datagrid('getSelected');
    148             if (row){
    149                 var index = $('#tt').datagrid('getRowIndex', row);
    150             } else {
    151                 index = 0;
    152             }
    153             $('#tt').datagrid('insertRow', {
    154                 index: index,
    155                 row:{                    
    156                 }
    157             });
    158             $('#tt').datagrid('selectRow',index);
    159             $('#tt').datagrid('beginEdit',index);
    160             _index = index;
    161             _flag = true;
    162         }
    163     </script>
    164 </head>
    165 <body>
    166     <h2>Editable DataGrid Demo</h2>
    167     <div class="demo-info">
    168         <div class="demo-tip icon-tip">&nbsp;</div>
    169         <div>Click the edit button on the right side of row to start editing.</div>
    170     </div>    
    171     <table id="tt"></table>    
    172 </body>
    173 </html>
    View Code

        效果如下:

        到此,要实现的功能已经完成了,上面的demo只是简单演示了这个过程,但是已经实现了可选择编辑某一行中的一列或多列。

  • 相关阅读:
    前后端分离djangorestframework—— 在线视频平台接入第三方加密防盗录视频
    ORACLE ASMLIB
    1519484
    How to deploy Oracle 12c Release 2 Grid and RAC Database on RHEL 7.x
    2647673
    Installation of SAP on RAC with Oracle ASM(转)
    redhat7.2下VNC没法显示图像
    Oracle12C
    (转)linux 内存管理——内核的shmall 和shmmax 参数
    ora121 tips
  • 原文地址:https://www.cnblogs.com/xfq-sean/p/4661330.html
Copyright © 2020-2023  润新知