热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

EasyUI:中datagrid数据表格的删除、编辑、保存、撤销功能实现

datagrid格式如下需求1.编辑:选中某一行后,点击编辑可以修改该行值字段。2.保存:编辑完成后,点击保存数据保

datagrid格式如下

在这里插入图片描述


需求


1. 编辑:选中某一行后,点击编辑可以修改该行"值"字段。


2. 保存:编辑完成后,点击保存数据保存。


3. 删除:选中某一行后,点击删除,删除该数据


4. 撤销: 撤销上一次删除


知识点


用到的easyUIAPI


  1. checkbox:复选框
  2. fit:冻结表头
  3. fitColumns:列宽度自适应
  4. singleSelect:行单选
  5. onBeginEdit:当某一行进入编辑模式的时候触发
  6. onAfterEdit:当某一行编辑完成后触发
  7. $('#dataanagrid-content-dg').datagrid('getData')获取表格中的数据,返回结果为对象{total:xx,row:{}}
  8. $('#dataanagrid-content-dg').datagrid('getSelected')获取选中行
  9. $('#dataanagrid-content-dg').datagrid('getRowIndex', selectRow)获取选中行的索引
  10. $('#dataanagrid-content-dg').datagrid('beginEdit', selectIndex);选中行进入编辑模式
  11. $('#dataanagrid-content-dg').datagrid("deleteRow", selectIndex);删除选中行
  12. $('#dataanagrid-content-dg').datagrid('endEdit', selectIndex);选中行退出编辑模式
  13. $("#dataanagrid-content-dg").datagrid("insertRow", { index: deleteRowObj.index, row: deleteRowObj.row });在对应索引行插入数据
  14. $("#dataanagrid-content-dg").datagrid("updateRow", {index: index,row: {"值": newItem,}});更新对应行数据
  15. sessionStorage.setItem("deleteRowInfo", deleteRow);设置sessionStorage中deleteRowInfo值
  16. sessionStorage.getItem("deleteRowInfo");获取sessionStorage中deleteRowInfo值
  17. 字符串转json:let deleteRowObj = JSON.parse(deleteRowInfo);
  18. json转字符串:let jsonRow = JSON.stringify(row);

代码

<button class&#61;"sigle-button" onclick&#61;"$UI.clickButton(&#39;edit&#39;)">编辑button>
<button class&#61;"sigle-button" onclick&#61;"$UI.clickButton(&#39;delete&#39;)">删除button>
<button class&#61;"sigle-button" onclick&#61;"$UI.clickButton(&#39;save&#39;)">保存button>
<button class&#61;"sigle-button" onclick&#61;"$UI.clickButton(&#39;recall&#39;)">撤销button>

$(&#39;#dataanagrid-content-dg&#39;).datagrid({checkbox: true,fit: true,fitColumns: true,singleSelect: true,idField: &#39;传感器&#39;,onBeginEdit: function (index, row) {sessionStorage.setItem("editDataFlag", "true");},onAfterEdit: function (index, row, changes) {let newItem &#61; changes.;newItem &#61; newItem.replace(/(0&#43;)$/g, "");if (newItem.indexOf(".") &#61;&#61;&#61; newItem.length - 1) {newItem &#61; newItem.substring(0, newItem.length - 1);}$("#dataanagrid-content-dg").datagrid("updateRow", {index: index,row: {"值": newItem,}});var row &#61; $("#dataanagrid-content-dg").datagrid(&#39;getData&#39;).rows[index];let data &#61; {&#39;name&#39;: row.传感器.split(":")[0],&#39;paratype&#39;: row.传感器.split(":")[1],&#39;time&#39;: row.时间,&#39;unit&#39;: row.单位,&#39;data&#39;: row.}changeItemData(data, &#39;edit&#39;)sessionStorage.setItem("editDataFlag", "false");$(this).datagrid(&#39;unselectRow&#39;, index);}
});

clickButton &#61; function (tag) {$.ajax({url: &#39;/Search/GetAccountID&#39;,type: &#39;get&#39;,dataType: &#39;text&#39;,async: false,success: function (response) {let selectRow, selectIndex;if (response !&#61;&#61; &#39;管理员&#39;) {editAlert("无权限操作&#xff01;", 500);return;}if (window.sessionStorage.getItem(&#39;dataAnaFlag&#39;) !&#61;&#61; "原始数据生成") {editAlert("只可操作原始数据&#xff01;", 1000);return;}if ($(&#39;#dataanagrid-content-dg&#39;).datagrid(&#39;getData&#39;).total &#61;&#61;&#61; 0) {editAlert("请选择监测站与测计&#xff01;", 1000);return;}if (tag !&#61;&#61; &#39;recall&#39; ) {selectRow &#61; $(&#39;#dataanagrid-content-dg&#39;).datagrid(&#39;getSelected&#39;);selectIndex &#61; $(&#39;#dataanagrid-content-dg&#39;).datagrid(&#39;getRowIndex&#39;, selectRow);if (selectRow.传感器.split(":")[1].indexOf("雨量") !&#61;&#61; -1) {alert("雨量数据不支持编辑与删除&#xff01;")return;}}if (tag &#61;&#61;&#61; &#39;edit&#39;) {let editDataFlag &#61; window.sessionStorage.getItem("editDataFlag");if (editDataFlag &#61;&#61;&#61; "true") {editAlert("请先保存上次更改数据&#xff01;", 1000);return;}if (selectRow &#61;&#61;&#61; null) {editAlert("请选择需要更改的数据&#xff01;", 1000);return;}// 开始编辑$(&#39;#dataanagrid-content-dg&#39;).datagrid(&#39;beginEdit&#39;, selectIndex);} else if (tag &#61;&#61;&#61; &#39;delete&#39;) {if (selectRow &#61;&#61;&#61; null) {editAlert("请选择需要删除的数据&#xff01;", 1000);return;}let row &#61; $("#dataanagrid-content-dg").datagrid(&#39;getData&#39;).rows[selectIndex];$(&#39;#dataanagrid-content-dg&#39;).datagrid("deleteRow", selectIndex);let jsonRow &#61; JSON.stringify(row);let deleteRow &#61; &#96;{"index":"${selectIndex}","row":${jsonRow}}&#96;sessionStorage.setItem("deleteRowInfo", deleteRow);let data &#61; {&#39;name&#39;: row.传感器.split(":")[0],&#39;paratype&#39;: row.传感器.split(":")[1],&#39;time&#39;: row.时间,&#39;unit&#39;: row.单位,&#39;date&#39;: row.}changeItemData(data, &#39;delete&#39;)} else if (tag &#61;&#61;&#61; &#39;save&#39;) {$(&#39;#dataanagrid-content-dg&#39;).datagrid(&#39;endEdit&#39;, selectIndex); } else if (tag &#61;&#61;&#61; &#39;recall&#39;) {let deleteRowInfo &#61; sessionStorage.getItem("deleteRowInfo");if (deleteRowInfo &#61;&#61;&#61; null) {editAlert("未执行删除操作&#xff01;", 1000);return;}let deleteRowObj &#61; JSON.parse(deleteRowInfo);deleteRowObj.row.&#61; Number(deleteRowObj.row.);deleteRowObj.index &#61; Number(deleteRowObj.index);$("#dataanagrid-content-dg").datagrid("insertRow", { index: deleteRowObj.index, row: deleteRowObj.row });sessionStorage.removeItem("deleteRowInfo");let data &#61; {&#39;name&#39;: deleteRowObj.row.传感器.split(":")[0],&#39;paratype&#39;: deleteRowObj.row.传感器.split(":")[1],&#39;time&#39;: deleteRowObj.row.时间,&#39;unit&#39;: deleteRowObj.row.单位,&#39;date&#39;: deleteRowObj.row.}changeItemData(data, &#39;recall&#39;)}}})}

/**
* 数据库操作
* &#64;param {any} options 修改的数据
* &#64;param {any} flag 删/改/增
*/

function changeItemData(options, flag) {let data &#61; {&#39;admi&#39;: options.name,&#39;item&#39;: options.paratype,&#39;time&#39;: options.time,&#39;data&#39;: options.data,&#39;type&#39;: flag}$.ajax({url: &#39;/Monitoring/changeItemData&#39;,type: &#39;post&#39;,dataType: &#39;text&#39;,data: data,async: false,success: function (response) {if (response &#61;&#61; "1") {alert("操作成功!");} else if (response &#61;&#61; "1") {alert("操作失败!");}}})
}

/*** 弹窗* &#64;param {any} msg 弹出语句* &#64;param {any} time 延时*/
function editAlert(msg, time) {$.messager.show({title: &#39;提示&#39;,msg: msg,timeout: time,showType: &#39;slide&#39;,style: {top: document.body.scrollTop &#43; document.documentElement.scrollTop}});
}

推荐阅读
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • 在C#开发中,实现UserControls之间高效传递CheckBox值是一个常见的需求。本文详细介绍了如何通过事件和委托机制,将UserControl3中的CheckBox值传递到UserControl1中,确保数据传递的准确性和实时性。此外,还提供了代码示例和最佳实践,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 本文介绍了一种使用 JavaScript 计算两个日期之间时间差的方法。该方法支持多种时间格式,并能返回秒、分钟、小时和天数等不同精度的时间差。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
author-avatar
Reaki是睿睿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有