zoukankan      html  css  js  c++  java
  • jquery EasyUI扩展可编辑的数据表格

            edatagrid(可编辑的数据表格)其实是扩展datagrid(数据表格),使用需引入 jquery.edatagrid.js文件

           效果图:

           

         使用方法:

          1、页面中引入 jquery.edatagrid.js文件

              <script type="text/javascript" src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.edatagrid.js"></script>

    1 <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/default/easyui.css">
    2 <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/jquery-easyui-1.3.3/themes/icon.css">
    3 <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/jquery-easyui-1.3.3/demo/demo.css">
    4 <script type="text/javascript" src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.min.js"></script>
    5 <script type="text/javascript" src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.easyui.min.js"></script>
    6 <script type="text/javascript" src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/locale/easyui-lang-zh_CN.js"></script>
    7 <script type="text/javascript" src="${pageContext.request.contextPath}/jquery-easyui-1.3.3/jquery.edatagrid.js"></script>
    View Code

         2、html标签中创建数据网格

         

     1 <table id="tt" style="600px;height:200px"
     2             title="Editable DataGrid"
     3             singleSelect="true">
     4         <thead>
     5             <tr>
     6                 <th field="itemid" width="100" editor="{type:'validatebox',options:{required:true}}">Item ID</th>
     7                 <th field="productid" width="100" editor="text">Product ID</th>
     8                 <th field="listprice" width="100" align="right" editor="{type:'numberbox',options:{precision:1}}">List Price</th>
     9                 <th field="unitcost" width="100" align="right" editor="numberbox">Unit Cost</th>
    10                 <th field="attr1" width="150" editor="text">Attribute</th>
    11             </tr>
    12         </thead>
    13     </table>
    View Code

         参考例子:

        

     1 <table id="dg" title="开发计划项" style=" 700px;height: 250px" toolbar="#toolbar" idField="id" rownumbers="true" fitColumns="true" singleSelect="true" >
     2          <thead>
     3              <tr>
     4                  <th field="id" width="50">编号</th>
     5                  <th field="planDate" width="50" editor="{type:'datebox',options:{required:true}}">日期</th>
     6                  <th field="planItem" width="100" editor="{type:'validatebox',options:{required:true}}">计划内容</th>
     7                  <th field="exeAffect" width="100" editor="{type:'validatebox',options:{required:true}}">执行效果</th>
     8              </tr>
     9          </thead>
    10      </table>
    11      
    12      <div id="toolbar">
    13          <a href="javaScript:void(0)" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="javascript:$('#dg').edatagrid('addRow')">添加计划</a>
    14          <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="javascript:$('#dg').edatagrid('destroyRow')">删除计划</a>
    15          <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-save" plain="true" onclick="javascript:$('#dg').edatagrid('saveRow');$('#dg').edatagrid('reload')">保存计划</a>
    16          <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-undo" plain="true" onclick="javascript:$('#dg').edatagrid('cancelRow')">撤销行</a>
    17          <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-kfcg" plain="true" onclick="updateSaleChanceDevResult(2)">开发成功</a>
    18          <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-zzkf" plain="true" onclick="updateSaleChanceDevResult(3)">终止开发</a>
    19      </div>
    View Code

       3、让数据网格(datagrid)可编辑 

    1 $('#tt').edatagrid({
    2         url: 'datagrid_data.json',
    3         saveUrl: ...,
    4         updateUrl: ...,
    5         destroyUrl: ...
    6     });
    View Code

        可以双击数据网格行开始编辑操作。您也可以设置 saveUrl、updateUrl、destroyUrl 属性来自动同步客户端与服务器端的数据。

      参考例子:

      

    1 $("#dg").edatagrid({
    2          url:'${pageContext.request.contextPath}/cusDevPlan/list.do?saleChanceId=${param.saleChanceId}',
    3          saveUrl:'${pageContext.request.contextPath}/cusDevPlan/save.do?saleChance.id=${param.saleChanceId}',
    4          updateUrl:'${pageContext.request.contextPath}/cusDevPlan/save.do?saleChance.id=${param.saleChanceId}',
    5          destroyUrl:'${pageContext.request.contextPath}/cusDevPlan/delete.do'
    6      });
    View Code

    下面为可编辑数据表格添加或重写的方法

    下面为jquery.edatagrid.js源码

      1 /**
      2  * edatagrid - jQuery EasyUI
      3  * 
      4  * Licensed under the GPL:
      5  *   http://www.gnu.org/licenses/gpl.txt
      6  *
      7  * Copyright 2011 stworthy [ stworthy@gmail.com ] 
      8  * 
      9  * Dependencies:
     10  *   datagrid
     11  *   messager
     12  * 
     13  */
     14 (function($){
     15     function buildGrid(target){
     16         var opts = $.data(target, 'edatagrid').options;
     17         $(target).datagrid($.extend({}, opts, {
     18             onDblClickCell:function(index,field){
     19                 if (opts.editing){
     20                     $(this).edatagrid('editRow', index);
     21                     focusEditor(field);
     22                 }
     23             },
     24             onClickCell:function(index,field){
     25                 if (opts.editing && opts.editIndex >= 0){
     26                     $(this).edatagrid('editRow', index);
     27                     focusEditor(field);
     28                 }
     29             },
     30             onAfterEdit: function(index, row){
     31                 opts.editIndex = undefined;
     32                 var url = row.isNewRecord ? opts.saveUrl : opts.updateUrl;
     33                 if (url){
     34                     $.post(url, row, function(data){
     35                         data.isNewRecord = null;
     36                         $(target).datagrid('updateRow', {
     37                             index: index,
     38                             row: data
     39                         });
     40                         if (opts.tree){
     41                             var idValue = row[opts.idField||'id'];
     42                             var t = $(opts.tree);
     43                             var node = t.tree('find', idValue);
     44                             if (node){
     45                                 node.text = row[opts.treeTextField];
     46                                 t.tree('update', node);
     47                             } else {
     48                                 var pnode = t.tree('find', row[opts.treeParentField]);
     49                                 t.tree('append', {
     50                                     parent: (pnode ? pnode.target : null),
     51                                     data: [{id:idValue,text:row[opts.treeTextField]}]
     52                                 });
     53                             }
     54                         }
     55                         opts.onSave.call(target, index, row);
     56                     },'json');
     57                 } else {
     58                     opts.onSave.call(target, index, row);
     59                 }
     60                 if (opts.onAfterEdit) opts.onAfterEdit.call(target, index, row);
     61             },
     62             onCancelEdit: function(index, row){
     63                 opts.editIndex = undefined;
     64                 if (row.isNewRecord) {
     65                     $(this).datagrid('deleteRow', index);
     66                 }
     67                 if (opts.onCancelEdit) opts.onCancelEdit.call(target, index, row);
     68             },
     69             onBeforeLoad: function(param){
     70                 if (opts.onBeforeLoad.call(target, param) == false){return false}
     71                 $(this).datagrid('rejectChanges');
     72                 if (opts.tree){
     73                     var node = $(opts.tree).tree('getSelected');
     74                     param[opts.treeParentField] = node ? node.id : undefined;
     75                 }
     76             }
     77         }));
     78         
     79         function focusEditor(field){
     80             var editor = $(target).datagrid('getEditor', {index:opts.editIndex,field:field});
     81             if (editor){
     82                 editor.target.focus();
     83             } else {
     84                 var editors = $(target).datagrid('getEditors', opts.editIndex);
     85                 if (editors.length){
     86                     editors[0].target.focus();
     87                 }
     88             }
     89         }
     90         
     91         if (opts.tree){
     92             $(opts.tree).tree({
     93                 url: opts.treeUrl,
     94                 onClick: function(node){
     95                     $(target).datagrid('load');
     96                 },
     97                 onDrop: function(dest,source,point){
     98                     var targetId = $(this).tree('getNode', dest).id;
     99                     $.ajax({
    100                         url: opts.treeDndUrl,
    101                         type:'post',
    102                         data:{
    103                             id:source.id,
    104                             targetId:targetId,
    105                             point:point
    106                         },
    107                         dataType:'json',
    108                         success:function(){
    109                             $(target).datagrid('load');
    110                         }
    111                     });
    112                 }
    113             });
    114         }
    115     }
    116     
    117     $.fn.edatagrid = function(options, param){
    118         if (typeof options == 'string'){
    119             var method = $.fn.edatagrid.methods[options];
    120             if (method){
    121                 return method(this, param);
    122             } else {
    123                 return this.datagrid(options, param);
    124             }
    125         }
    126         
    127         options = options || {};
    128         return this.each(function(){
    129             var state = $.data(this, 'edatagrid');
    130             if (state){
    131                 $.extend(state.options, options);
    132             } else {
    133                 $.data(this, 'edatagrid', {
    134                     options: $.extend({}, $.fn.edatagrid.defaults, $.fn.edatagrid.parseOptions(this), options)
    135                 });
    136             }
    137             buildGrid(this);
    138         });
    139     };
    140     
    141     $.fn.edatagrid.parseOptions = function(target){
    142         return $.extend({}, $.fn.datagrid.parseOptions(target), {
    143         });
    144     };
    145     
    146     $.fn.edatagrid.methods = {
    147         options: function(jq){
    148             var opts = $.data(jq[0], 'edatagrid').options;
    149             return opts;
    150         },
    151         enableEditing: function(jq){
    152             return jq.each(function(){
    153                 var opts = $.data(this, 'edatagrid').options;
    154                 opts.editing = true;
    155             });
    156         },
    157         disableEditing: function(jq){
    158             return jq.each(function(){
    159                 var opts = $.data(this, 'edatagrid').options;
    160                 opts.editing = false;
    161             });
    162         },
    163         editRow: function(jq, index){
    164             return jq.each(function(){
    165                 var dg = $(this);
    166                 var opts = $.data(this, 'edatagrid').options;
    167                 var editIndex = opts.editIndex;
    168                 if (editIndex != index){
    169                     if (dg.datagrid('validateRow', editIndex)){
    170                         if (editIndex>=0){
    171                             if (opts.onBeforeSave.call(this, editIndex) == false) {
    172                                 setTimeout(function(){
    173                                     dg.datagrid('selectRow', editIndex);
    174                                 },0);
    175                                 return;
    176                             }
    177                         }
    178                         dg.datagrid('endEdit', editIndex);
    179                         dg.datagrid('beginEdit', index);
    180                         opts.editIndex = index;
    181                         var rows = dg.datagrid('getRows');
    182                         opts.onEdit.call(this, index, rows[index]);
    183                     } else {
    184                         setTimeout(function(){
    185                             dg.datagrid('selectRow', editIndex);
    186                         }, 0);
    187                     }
    188                 }
    189             });
    190         },
    191         addRow: function(jq){
    192             return jq.each(function(){
    193                 var dg = $(this);
    194                 var opts = $.data(this, 'edatagrid').options;
    195                 if (opts.editIndex >= 0){
    196                     if (!dg.datagrid('validateRow', opts.editIndex)){
    197                         dg.datagrid('selectRow', opts.editIndex);
    198                         return;
    199                     }
    200                     if (opts.onBeforeSave.call(this, opts.editIndex) == false){
    201                         setTimeout(function(){
    202                             dg.datagrid('selectRow', opts.editIndex);
    203                         },0);
    204                         return;
    205                     }
    206                     dg.datagrid('endEdit', opts.editIndex);
    207                 }
    208                 dg.datagrid('appendRow', {isNewRecord:true});
    209                 var rows = dg.datagrid('getRows');
    210                 opts.editIndex = rows.length - 1;
    211                 dg.datagrid('beginEdit', opts.editIndex);
    212                 dg.datagrid('selectRow', opts.editIndex);
    213                 
    214                 if (opts.tree){
    215                     var node = $(opts.tree).tree('getSelected');
    216                     rows[opts.editIndex][opts.treeParentField] = (node ? node.id : 0);
    217                 }
    218                 
    219                 opts.onAdd.call(this, opts.editIndex, rows[opts.editIndex]);
    220             });
    221         },
    222         saveRow: function(jq){
    223             return jq.each(function(){
    224                 var dg = $(this);
    225                 var opts = $.data(this, 'edatagrid').options;
    226                 if (opts.onBeforeSave.call(this, opts.editIndex) == false) {
    227                     setTimeout(function(){
    228                         dg.datagrid('selectRow', opts.editIndex);
    229                     },0);
    230                     return;
    231                 }
    232                 $(this).datagrid('endEdit', opts.editIndex);
    233             });
    234         },
    235         cancelRow: function(jq){
    236             return jq.each(function(){
    237                 var index = $(this).edatagrid('options').editIndex;
    238                 $(this).datagrid('cancelEdit', index);
    239             });
    240         },
    241         destroyRow: function(jq){
    242             return jq.each(function(){
    243                 var dg = $(this);
    244                 var opts = $.data(this, 'edatagrid').options;
    245                 var row = dg.datagrid('getSelected');
    246                 if (!row){
    247                     $.messager.show({
    248                         title: opts.destroyMsg.norecord.title,
    249                         msg: opts.destroyMsg.norecord.msg
    250                     });
    251                     return;
    252                 }
    253                 $.messager.confirm(opts.destroyMsg.confirm.title,opts.destroyMsg.confirm.msg,function(r){
    254                     if (r){
    255                         var index = dg.datagrid('getRowIndex', row);
    256                         if (row.isNewRecord){
    257                             dg.datagrid('cancelEdit', index);
    258                         } else {
    259                             if (opts.destroyUrl){
    260                                 var idValue = row[opts.idField||'id'];
    261                                 $.post(opts.destroyUrl, {id:idValue}, function(){
    262                                     if (opts.tree){
    263                                         dg.datagrid('reload');
    264                                         var t = $(opts.tree);
    265                                         var node = t.tree('find', idValue);
    266                                         if (node){
    267                                             t.tree('remove', node.target);
    268                                         }
    269                                     } else {
    270                                         dg.datagrid('cancelEdit', index);
    271                                         dg.datagrid('deleteRow', index);
    272                                     }
    273                                     opts.onDestroy.call(dg[0], index, row);
    274                                 });
    275                             } else {
    276                                 dg.datagrid('cancelEdit', index);
    277                                 dg.datagrid('deleteRow', index);
    278                                 opts.onDestroy.call(dg[0], index, row);
    279                             }
    280                         }
    281                     }
    282                 });
    283             });
    284         }
    285     };
    286     
    287     $.fn.edatagrid.defaults = $.extend({}, $.fn.datagrid.defaults, {
    288         editing: true,
    289         editIndex: -1,
    290         destroyMsg:{
    291             norecord:{
    292                 title:'警告',
    293                 msg:'没有记录被选中!'
    294             },
    295             confirm:{
    296                 title:'系统提示',
    297                 msg:'您确定要删除这条记录吗?'
    298             }
    299         },
    300 //        destroyConfirmTitle: 'Confirm',
    301 //        destroyConfirmMsg: 'Are you sure you want to delete?',
    302         
    303         url: null,    // return the datagrid data
    304         saveUrl: null,    // return the added row
    305         updateUrl: null,    // return the updated row
    306         destroyUrl: null,    // return {success:true}
    307         
    308         tree: null,        // the tree selector
    309         treeUrl: null,    // return tree data
    310         treeDndUrl: null,    // to process the drag and drop operation, return {success:true}
    311         treeTextField: 'name',
    312         treeParentField: 'parentId',
    313         
    314         onAdd: function(index, row){},
    315         onEdit: function(index, row){},
    316         onBeforeSave: function(index){},
    317         onSave: function(index, row){},
    318         onDestroy: function(index, row){}
    319     });
    320 })(jQuery);
    View Code
  • 相关阅读:
    用jmeter进行多用户并发压力测试 [转]
    jmeter 压力测试 参数
    web测试 结果存储类型为“Database”,但尚未指定结果储存库连接字符串
    apache配置多站点
    seajs + easyui [转]
    js,this,constrct ,prototype
    js call apply
    js this [转]
    [leetcode] Longest Common Prefix @ Python
    [leetcode] path sum @ Python [recursion]
  • 原文地址:https://www.cnblogs.com/jedjia/p/edatagrid.html
Copyright © 2011-2022 走看看