1.修改

双击,进入一行的编辑状态的功能的实现

2.删除

3.扩展easyui的datagrid,添加动态增加或删除Editor的方法

(1)背景要求:

对于某一列,比如密码,动态增加时候,是可以编辑的,但是如果保存之后,再对那一行编辑的时候,是不能修改的。

(2)解决方案

扩展代码:

  1. //扩展datagrid,添加动态增加或删除editor的方法
  2. $.extend($.fn.datagrid.methods,{
  3. addEditor:function(jq,param){
  4. if(param instanceof Array){
  5. $.each(param,function(index,item){
  6. var e=$(jq).datagrid('getColumnOption',item.field);
  7. e.editor=item.editor;
  8. });
  9. }else{
  10. var e = $(jq).datagrid('getColumnOption', param.field);
  11. e.editor = param.editor;
  12. }
  13. },
  14. removeEditor:function(jq,param){
  15. if(param instanceof Array ){
  16. $.each(param, function(index, item) {
  17. var e = $(jq).datagrid('getColumnOption', item);
  18. e.editor = {};
  19. });
  20. }else {
  21. var e = $(jq).datagrid('getColumnOption', param);
  22. e.editor = {};
  23. }
  24. }
  25. });

代码:

  1. <script charset=UTF-8">
  2.  
  3. $(function(){
  4.  
  5. //扩展datetimebox,由于editors里面没有datetimebox,所以要进行扩展
  6. $.extend($.fn.datagrid.defaults.editors, {
  7. datetimebox: {
  8. init: function(container, options){
  9. var editor = $('<input />').appendTo(container);
  10. options.editable=false; //在datetimebox 设置editable="false",这样用户就不能填写时间,只能选择时间
  11. editor.datetimebox(options);
  12. return editor;
  13. },
  14. destroy: function(target){//结束编辑行的时候销毁datetimebox
  15. $(target).datetimebox('destroy');
  16. },
  17. getValue: function(target){
  18. return $(target).datetimebox('getValue');
  19. },
  20. setValue: function(target, value){
  21. $(target).datetimebox('setValue',value);
  22. },
  23. resize: function(target, width){
  24. $(target).datetimebox('resize',width);
  25. }
  26. }
  27. });
  28.  
  29. //扩展datagrid,添加动态增加或删除editor的方法
  30. $.extend($.fn.datagrid.methods,{
  31. addEditor:function(jq,param){
  32. if(param instanceof Array){
  33. $.each(param,function(index,item){
  34. var e=$(jq).datagrid('getColumnOption',item.field);
  35. e.editor=item.editor;
  36. });
  37. }else{
  38. var e = $(jq).datagrid('getColumnOption', param.field);
  39. e.editor = param.editor;
  40. }
  41. },
  42. removeEditor:function(jq,param){
  43. if(param instanceof Array ){
  44. $.each(param, function(index, item) {
  45. var e = $(jq).datagrid('getColumnOption', item);
  46. e.editor = {};
  47. });
  48. }else {
  49. var e = $(jq).datagrid('getColumnOption', param);
  50. e.editor = {};
  51. }
  52. }
  53. });
  54.  
  55. var editRow=undefined; //用editRow存储开启编辑状态行的索引
  56. var usersearchForm=$("#admin_user_searchForm").form();//获取表单元素的值
  57.  
  58. var userDatagrid=$("#admin_user_datagrid").datagrid({ //给datagrid初始化
  59. url:'',
  60. title:'用户列表',
  61. iconCls:'icon-save',
  62. pagination:true, //分页
  63. pagesize:10, //每页有10行数据
  64. pageList:[10,20,30,40], //注意这些数值是pagesize的倍数
  65. fit:true,
  66. fitColumns:false, //false,表示会出现横向滚动条;true,则表示不能出现横向滚动条(列少的时候用)
  67. nowarp:false, //当表格中某一行的一个列内容较多时,就会自动折行(换下一行显示)
  68. border:false, //去掉datagrid的边框
  69. idField:'id', //自动标记选中的行,换页后,前面所选中的行依然保留
  70. columns:[[
  71. {
  72. title:'编号',
  73. field:'id',
  74. width:100, //宽度一定要给出,不给出会报错
  75. sortable:true,
  76. checkbox:true, //选中框
  77. },{
  78. title:'姓名',
  79. field:'name',
  80. width:100,
  81. sortable:true,
  82. editor:{
  83. type:'validatebox',
  84. options:{
  85. required:true
  86. }
  87. }
  88. },{
  89. title:'密码',
  90. field:'password',
  91. width:100,
  92. editor:{
  93. type:'validatebox',
  94. options:{
  95. required:true
  96. }
  97. }
  98. },{
  99. title:'创建时间',
  100. field:'createdatetime',
  101. width:200,
  102. editor:{
  103. type:'datetimebox',
  104. options:{
  105. required:true
  106. }
  107. }
  108. },{
  109. title:'最后修改时间',
  110. field:'modifydatetime',
  111. width:200,
  112. editor:{
  113. type:'datetimebox',
  114. options:{
  115. required:true
  116. }
  117. }
  118. }
  119.  
  120. ]],
  121.  
  122. toolbar:[{
  123. text:'增加',
  124. iconCls:'icon-add',
  125. handler:function(){
  126. if(editRow != undefined){//如果有一行处在编辑状态,那么点击增加按钮时候,就要关闭它的行编辑状态
  127. userDatagrid.datagrid('endEdit',editRow);
  128. }
  129.  
  130. if(editRow == undefined){//保持只有一行处在编辑状态,即==undefined的时候,才让其进行添加新的一行
  131.  
  132. //***动态添加editor
  133. userDatagrid.datagrid('addEditor',{
  134. field:'password',
  135. editor:{
  136. type:'validatebox',
  137. options:{
  138. required:true
  139. }
  140. }
  141. });
  142.  
  143. //添加到第一行
  144. userDatagrid.datagrid('insertRow',{
  145. index:0,//插入在第一行,index是从0开始的
  146. row:{
  147. id:'123',
  148. name:'请输入姓名',
  149. password:'请输入密码'
  150. }
  151. });
  152.  
  153. userDatagrid.datagrid('beginEdit',0);//开启行编辑状态,index是从0开始的,从第0行开始编辑
  154. editRow=0; //记录开启编辑行的索引
  155.  
  156. }
  157.  
  158. }
  159. },'-',{
  160. text:'删除',
  161. iconCls:'icon-remove',
  162. handler:function(){
  163. var rows=userDatagrid.datagrid('getSelections');//记录选中的行数
  164. if(rows.length>0){
  165. $.messager.confirm('请确认','您确定要删除当前所有选择的项目么?',function(b){//当点击提示框的确定按钮的时候,b就是true
  166. if(b){
  167. var ids=[];//将要删除的行的id存放在ids中
  168. for(var i=0;i<row.length;i++){
  169. ids.push(rows[i].id);
  170. }
  171.  
  172. /*此处与后台交互删除*/
  173.  
  174. console.info(ids.join(','));
  175. }
  176. });
  177. }else{
  178. $.messager.alert('提示','请选择要删除的记录!','error');
  179. }
  180. }
  181. },'-',{
  182. text:'修改',
  183. iconCls:'icon-edit',
  184. handler:function(){
  185. var rows=userDatagrid.datagrid('getSelections');//记录选中的行数
  186. if(rows.length==1){
  187.  
  188. //***动态修改editor
  189. userDatagrid.datagrid('removeEditor','password');
  190.  
  191. if(editRow != undefined){//如果有一行处在编辑状态,那么点击增加按钮时候,就要关闭它的行编辑状态
  192. userDatagrid.datagrid('endEdit',editRow);
  193. }
  194.  
  195. if(editRow == undefined){//保持只有一行处在编辑状态,即==undefined的时候,才让其进行添加新的一行
  196. var index=userDatagrid.datagrid('getRowIndex',rows[0]);//记录所选择行的索引,rows[0]表示一行
  197. userDatagrid.datagrid('beginEdit',index);//开启行编辑状态
  198. editRow=index; //记录开启编辑行的索引
  199. userDatagrid.datagrid('unselectAll'); //取消选中当前页所有的行
  200.  
  201. }
  202. }
  203. }
  204. },'-',{
  205. text:'保存',
  206. iconCls:'icon-save',
  207. handler:function(){
  208. userDatagrid.datagrid('endEdit',editRow);//点击保存按钮,调用endEdit方法之后,就会自动触发调用onAfterEdit函数
  209. }
  210. },'-',{
  211. text:'取消编辑',
  212. iconCls:'icon-redo',
  213. handler:function(){
  214. editRow=undefined;
  215. userDatagrid.datagrid('rejectChanges'); //rejectChanges回滚
  216. userDatagrid.datagrid('unselectAll'); //取消选中当前页所有的行
  217. }
  218. },'-',
  219. ],
  220.  
  221. onAfterEdit:function(rowIndex,rowData,changes){//关闭编辑状态,rowData是编辑行所对应的记录
  222. console.info(rowData);
  223. editRow=undefined; //将editRow置空,让其恢复原来的状态,因为在点击增加的时候,editRow就不为空了
  224.  
  225. //*****与后台交互的位置****
  226. /* $.ajax(); success:function(rowData){}*/
  227.  
  228. },
  229.  
  230. //****双击,进入一行的行编辑状态***
  231. onDblClickRow:function(rowIndex,rowData){
  232. if(editRow != undefined){//如果有一行处在编辑状态,那么点击增加按钮时候,就要关闭它的行编辑状态
  233. userDatagrid.datagrid('endEdit',editRow);
  234. }
  235.  
  236. if(editRow == undefined){//保持只有一行处在编辑状态,即==undefined的时候,才让其进行添加新的一行
  237. userDatagrid.datagrid('beginEdit',rowIndex);//开启行编辑状态
  238. editRow=rowIndex; //记录开启编辑行的索引
  239.  
  240. }
  241. }
  242.  
  243. });
  244.  
  245. $("#searchForm").click(function(){//查询
  246. userDatagrid.datagrid('load',serializeObject(usersearchForm));
  247. });
  248.  
  249. $("#cleanForm").click(function(){
  250. userDatagrid.datagrid('load',{});//就是查询所有的内容了,相当于恢复到初始的界面
  251. usersearchForm.find('input').val('');//将input输入框里面的值清空了
  252. });
  253.  
  254. });
  255.  
  256. function serializeObject(form){//将form表单元素的值序列化成对象
  257. var o={};
  258. $.each(form.serializeArray(),function(index){
  259. if(o[this['name']]){
  260. o[this['name']]=o[this['name']]+","+this['value'];
  261. }else{
  262. o[this['name']]=this['value'];
  263. }
  264. });
  265. return o;
  266. };
  267.  
  268. </script>
  269. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  270. <div class="easyui-layout" fit="true" border="false">
  271. <div region="north" border="false" title="过滤" style="height:120px;overflow:hidden;">
  272. <form id="admin_user_searchForm">
  273. <table class="tableForm datagrid-toolbar" style="height:100%;width:100%">
  274. <tr>
  275. <th>用户名:</th>
  276. <td><input name="name" style="width:315px;"></td>
  277. </tr>
  278. <tr>
  279. <th>创建时间:</th>
  280. <td><input name="createdatetimeStart" class="easyui-datetimebox" editable="false" style="width:155px;"><input name="createdatetimeEnd" class="easyui-datetimebox" editable="false" style="width:155px;"></td>
  281. </tr>
  282. <tr>
  283. <th>最后修改时间:</th>
  284. <td><input name="madifydatetimeStart" class="easyui-datetimebox" editable="false" style="width:155px;"><input name="madifydatetimeEnd" class="easyui-datetimebox" editable="false" style="width:155px;">
  285. <a href="javascript:void(0);" class="easyui-linkbutton" id="searchForm">查询</a>
  286. <a href="javascript:void(0);" class="easyui-linkbutton" id="cleanForm">清空</a>
  287. </td>
  288. </tr>
  289. </table>
  290. </form>
  291. </div>
  292. <div region="center" border="false">
  293. <table id="admin_user_datagrid"></table>
  294. </div>
  295. </div>

datagrid的修改和删除功能的实现的更多相关文章

  1. 微信小程序云开发-云函数-云函数实现数据的查询、修改和删除功能

    一.云函数获取商品信息 1.创建云函数getData,云函数功能:获取商品信息 2.在本地小程序页面调用云函数getData  二.云函数修改商品信息 1.创建云函数updateData,云函数功能: ...

  2. jsp 实现修改和删除功能

    main.jsp   实现查询 在此界面快捷方式到修改界面 点击修改  会把数据传递到exit.jsp 修改   edit.jsp 前面数据: 数据库: /* Navicat Premium Data ...

  3. 基于SpringBoot从零构建博客网站 - 新增创建、修改、删除专栏功能

    守望博客是支持创建专栏的功能,即可以将一系列相关的文章归档到专栏中,方便用户管理和查阅文章.这里主要讲解专栏的创建.修改和删除功能,至于专栏还涉及其它的功能,例如关注专栏等后续会穿插着介绍. 1.创建 ...

  4. Jquery EasyUI的添加,修改,删除,查询等基本操作介绍

    http://www.jb51.net/article/42016.htm 初识Jquery EasyUI看了一些博主用其开发出来的项目,页面很炫,感觉功能挺强大,效果也挺不错,最近一直想系统学习一套 ...

  5. 摘:通过ICursor对Table进行操作(添加、修改、删除)

    通过ICursor对Table进行操作(添加.修改.删除) 连接上数据表的目的就是对其进行包括浏览.添加.修改.删除等基本操作. 浏览功能,之前文章中一提到,就是将Itable转换为DataTable ...

  6. 通过ICursor对Table进行操作(添加、修改、删除)

    通过ICursor对Table进行操作(添加.修改.删除) 2010-03-16 16:07:37|  分类: 工作|举报|字号 订阅 来自:http://blog.163.com/liuyang12 ...

  7. 实例:SSH结合Easyui实现Datagrid的批量删除功能

    在我先前的基础上面添加批量删除功能.实现的效果如下 删除成功 通常情况下删除不应该真正删除,而是应该有一个标志flag,但flag=true表示状态可见,但flag=false表示状态不可见,为删除状 ...

  8. MVC5 网站开发之七 用户功能 3用户资料的修改和删除

    这次主要实现管理后台界面用户资料的修改和删除,修改用户资料和角色是经常用到的功能,但删除用户的情况比较少,为了功能的完整性还是坐上了.主要用到两个action "Modify"和& ...

  9. MVC5 网站开发之八 栏目功能 添加、修改和删除

    本次实现栏目的浏览.添加.修改和删除. 栏目一共有三种类型. 常规栏目-可以添加子栏目,也可以添加内容模型.当不选择内容模型时,不能添加内容. 单页栏目-栏目只有一个页面,可以设置视图. 链接栏目-栏 ...

随机推荐

  1. java - Socket简单编程实践

    1.简介: 1)SOCKET是应用程序和网络之间的一个接口.SOCKET创建设置好以后,应用程序可以: 通过网络把数据发送到socket . 通过网络从socket接收数据.(通信的前提是应用程序知道 ...

  2. 阐述简称PO,VO,TO,BO,DAO,POJO

    PO(persistant object) 持久对象 在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了.通常对应数据模型(数据库),本身还有部分业务逻辑的处理.可以看成是与数据库中 ...

  3. 三、css 和 js 的装载与执行

    一个网站在浏览器端是如何渲染的? 一.html 页面加载渲染的过程. 请求回来最先应该是HTML,从一个字节流转换成字符流,浏览器拿到字符流,然后浏览器端进行相应的词法分析成相应的token,然后不断 ...

  4. ajax实现异步请求的过程

    var xhr;        xhr = new XMLHttpRequest(); //创建一个异步对象        xhr.open("Get", "test.a ...

  5. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:10.项目介绍之架构(2)

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 前面我们讲到<迷你微信>服务器端的主架构,现在我们来描述一下它的模块详细信息. 网络模块 从上图我 ...

  6. centOS7虚拟机和本机ping通

    1.配置centOS虚拟机网卡 先设置桥接模式 此处的address要和本机的vmware在同一个网段 2.重启centOS网卡 3.关闭本机和虚拟机防火墙,防止ping不通 centOS命令: fi ...

  7. SQLServer从其他表获取的数据更新该表的一部分

    在网上常见的是update  a  set  username  =  username  FROM b  on a.userid=b.userid,该更新语句是对a表中所有行进行更新.如果只更新一部 ...

  8. 关于VPS主机KVM/OPENVZ/CN2区别与含义

    1.OPENVZ OpenVZ是基于Linux内核和作业系统的操作系统级虚拟化技术.OpenVZ允许物理服务器运行多个操作系统,被称虚拟专用服务器(VPS,Virtual Private Server ...

  9. 将腾讯视频客户端缓冲的文件转换为一个MP4格式文件

    打开腾讯视频windows客户端,播放要下载的视频,逐步快进使其缓冲完毕: 按照下图所示,复制缓存路径: 在cmd.exe的界面中输入“cd C:\854456b6d5a187ff3c0f553918 ...

  10. Linux I/O调度

    一) I/O调度程序的总结 1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.    2) 每个块设备都有它自己的队列.    3) I/O调度程序负责维护这些队列的顺 ...