下面这个是一个单独的js文件,可以直接在页面引入他就可以用了
主要有三种方式实现编辑模式增删改操作
1.直接双击选中编辑
2.选中行点击修改按钮编辑
3.右键选择相关的操作
可能中间有部分功能没有实现
- <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
- <!-- 引入自定义的js文件 -->
- <script type="text/javascript" src="${pageContext.request.contextPath}/js/Myutil.js"></script>
- <script type="text/javascript">
- var datagrid;
- $(function() {
- editRow = undefined ; //保存当前正在编辑的行,控制同一时间只开启一行
- $('#datagrid').datagrid({
- rowStyler : function(rowIndex,rowData){ //行样式
- console.info(rowData.name);
- if(rowData.name == '张三丰'){
- return ''; //让张三丰这一行不显示样式
- }
- return 'background-color:#6293BB; font-weight:bold; height:150px';
- },
- //url和columns属性必须要有
- //后台响应数据的地址,返回JSON字符串来填充grid
- url : '${pageContext.request.contextPath}/student/all',
- title : '学生列表',
- iconCls : 'icon-save',
- pagination : true, //分页工具条
- pageSize : 10, //每页显示的大小,联合pageList一起用
- pageList : [ 10, 20, 30, 40 ],
- fit : true, //随着里里面的宽高自适应
- fitColumns : false, //设置成true填充满整个grid的宽,列多时设置为false,grid太窄时有横向滚动条
- nowarp : false, //一行内容太长时可以自动换行全部显示出来
- border : false,
- idField : 'id', //通过主键找到对应的记录
- sortName : 'name', //默认用name来进行排序
- sortOrder : 'desc', //排序的种类
- frozenColumns: [ [ { //冻结列,此时fitColumns不能设置成true,否则没有效果
- title : '',
- field : '',
- width : 50 , //json对象返回的属性要对应
- checkbox : true //在前面有个选项框
- }, {
- title : '编号',
- field : 'id',
- //json对象返回的属性要对应
- width : 100, //必须给,否则列不显示
- sortable : true , //设置在哪里表示可以用此列排序
- align : 'center' //让编号列居中显示
- }] ],
- columns : [ [ {
- title : '用户名',
- field : 'name',
- width : 200,
- align : 'center' ,
- sortable : true , //设置在哪里表示可以用此列排序
- editor : { //让用户名列变成可编辑且数据必填
- type : 'validatebox' , //让编辑框变成那种样
- options : {
- required : true
- }
- },
- //当类容较长时,鼠标移上去将全部显示出来,此函数必须要换回一个字符串,返回的字符串替换当前的值
- formatter : function(value,rowData,rowIndex){
- //height可以设置列高
- return '<div style="height:50px" title="'+value+'">'+value+'</div>'; //利用html方式实现
- }
- } , {
- title : '密码',
- field : 'password',
- width : 200 ,
- editor : {
- type : 'validatebox' ,
- options : {
- required : true
- }
- } ,
- formatter : function(value,rowData,rowIndex){
- return '******'; //将密码用*显示
- } ,
- align : 'center'
- }, {
- title : '创建时间',
- field : 'createtime',
- width : 200,
- sortable : true ,
- editor : {
- type : 'datetimebox' , //自定义的类型
- options : {
- required : true
- }
- } ,
- align : 'center'
- } , {
- title : '操作',
- field : 'cz',
- width : 130,
- formatter : function(value,rowData,rowIndex){
- return '<button onclick="show('+rowIndex+');">编辑</button><button>删除</button>';
- },
- align : 'center'
- }] ], //用两个中括号可以合并单元格
- toolbar : [ { //添加一排按钮
- text : '增加',
- iconCls : 'icon-add',
- handler : function() {
- if(editRow != undefined ){
- $('#datagrid').datagrid('endEdit',editRow); //避免同时开启多个编辑行
- }
- if(editRow == undefined){
- /*$('#datagrid').datagrid('appendRow',{ //在当前页末尾添加一行
- id : 'ww' ,
- name : '' ,
- password : '' ,
- createtime : ''
- });
- var rows = $('#datagrid').datagrid('getRows'); //得到当前页的所有行
- $('#datagrid').datagrid('beginEdit',rows.length - 1 ); //让添加的这一行开启编辑状态,索引从0开始
- */
- //调用自己添加的方法,让添加用户时密码可以编辑,创建时间不可编辑
- changeEditorAddRow();
- $('#datagrid').datagrid('insertRow',{
- index : 0 , //添加到第一行
- row : {
- name : '请输入用户名' ,
- password : '请输入密码' ,
- createtime : '请选择时间'
- }
- });
- $('#datagrid').datagrid('beginEdit' ,0); //让添加的第一行开启编辑状态
- editRow = 0 ; //记录当前编辑行的索引
- }
- }
- }, '-', {
- text : '删除',
- iconCls : 'icon-remove',
- handler : function() {
- var rows = $('#datagrid').datagrid('getSelections'); //得到所选择的行
- if(rows.length > 0){
- $.messager.confirm('请确认','您确定要删除当前所选中的项目吗?',function(b){
- if(b){
- var ids = [] ;//传给后台的id集合
- for(var i = 0;i < rows.length; i++){
- ids.push(rows[i].id); //拼接所选中的id
- }
- $.ajax({
- url : '${pageContext.request.contextPath}/student/delete' ,
- data : {
- ids : ids.join(',') //将数组转换成一个以逗号分割的字符串传给后台
- },
- type : 'post',
- dataType : 'json' ,
- success : function(r){
- if(r && r.flag){
- $('#datagrid').datagrid('load'); //删除后刷新页面
- $('#datagrid').datagrid('unselectAll'); //避免系统还在选中状态,下次删除新的数据出错
- $.messager.show({
- title : '提示',
- msg : r.msg
- });
- }else{
- $.messager.alert('错误','删除失败' ,'error');
- }
- }
- });
- }
- });
- }else{
- $.messager.alert('提示','请选择要删除的记录','warning');//这里提示一个警告
- }
- }
- }, '-', {
- text : '修改', //'-',是一个分隔符
- iconCls : 'icon-edit',
- handler : function() {
- var rows = $('#datagrid').datagrid('getSelections'); //得到所选择的行
- if(rows.length == 1){
- changeEditorEditRow();
- if(editRow != undefined ){ //先判断双击前有没有在编辑的行
- $('#datagrid').datagrid('endEdit',editRow); //避免同时开启多个编辑行
- }
- if(editRow == undefined){
- var index = $('#datagrid').datagrid('getRowIndex' ,rows[0]);//得到选择行的索引
- $('#datagrid').datagrid('beginEdit' ,index);
- editRow = index ; //记录当前开启编辑的行
- //在开启编辑状态时取消它的选择状态,这样就可以在修改时放弃修改当前行去修改其他行
- $('#datagrid').datagrid('unselectAll');
- }
- }
- }
- }, '-', {
- text : '保存', //'-',是一个分隔符
- iconCls : 'icon-save',
- handler : function() {
- $('#datagrid').datagrid('endEdit',editRow);
- }
- }, '-' , {
- text : '取消编辑', //'-',是一个分隔符
- iconCls : 'icon-redo',
- handler : function() {
- editRow = undefined ;
- $('#datagrid').datagrid('rejectChanges'); //调用回滚方法
- $('#datagrid').datagrid('unselectAll');
- }
- }, '-', {
- text : '清空dataGrid', //'-',是一个分隔符
- iconCls : 'icon-undo',
- handler : function() {
- $('#datagrid').datagrid('loadData',[]);
- }
- } ],
- onAfterEdit : function(rowIndex,rowData,changes){ //在提交编辑行后自动执行事件,自动封装数据
- //console.info(rowData); //rowData刚结束编辑的哪一行数据,返回的是一个数组
- //console.info(changes); //changes是改变的数据
- var inserted = $('#datagrid').datagrid('getChanges','inserted'); //得到插入的数据
- var updated = $('#datagrid').datagrid('getChanges','updated'); //得到修改的数据
- //即没有选择添加也没有选择修改就直接return结束,不往下面走了 不然url提交地址为空
- if(inserted.length < 1 && updated.length < 1){
- editRow = undefined ;
- datagrid.datagrid('unselectAll');
- return ;
- }
- var url = '';
- if(inserted.length > 0){ //表示点击的添加按钮
- url = '${pageContext.request.contextPath}/student/insert' ;
- }
- if(updated.length > 0){ //表示点击的添加按钮
- url = '${pageContext.request.contextPath}/student/update' ;
- }
- $.ajax({
- url : url ,
- data : rowData ,
- dataType : 'json' ,
- success : function(r){
- if(r && r.flag){
- $('#datagrid').datagrid('acceptChanges'); //后台添加成功后,前台保持同步,即不能"反悔"
- $('#datagrid').datagrid('load'); //添加后刷新页面
- $.messager.show({
- msg : r.msg ,
- title : '成功'
- });
- }else{
- $('#datagrid').datagrid('rejectChanges'); //添加失败自动取消编辑框,回滚到前一个状态
- $.messager.alert('错误', r.msg ,'error');
- }
- editRow = undefined ;
- $('#datagrid').datagrid('unselectAll'); //取消选中,避免出现黄色条
- }
- });
- //console.info(inserted);
- //console.info(updated);
- },
- //直接双击修改
- onDblClickRow : function(rowIndex,rowData){ //双击行触发事件
- changeEditorEditRow(); //调用方法
- if(editRow != undefined ){ //先判断双击前有没有在编辑的行
- $('#datagrid').datagrid('endEdit',editRow); //避免同时开启多个编辑行
- }
- if(editRow == undefined){
- $('#datagrid').datagrid('beginEdit' ,rowIndex);
- editRow = rowIndex ; //记录当前编辑行的索引
- }
- },
- //datagrid的右键事件,右键显示一个菜单,三个参数是事件自带的
- onRowContextMenu : function(e, rowIndex, rowData){
- e.preventDefault(); //阻止浏览器右键默认的事件
- $(this).datagrid('unselectAll'); //先取消所有的选中,避免同一时间右键选中多行
- $(this).datagrid('selectRow',rowIndex); //选中右键的这一行
- $('#menu').menu('show', {
- left : e.pageX, //让菜单位置跟着鼠标位置的改变而移动
- top : e.pageY
- });
- }
- });
- //调用Myutil的方法将form表单元素的值序列化成对象,否则传过去的是字符串
- sel = function(){
- student_searchForm = $('#student_searchForm').form();
- console.info(serializeObject(student_searchForm));
- $('#datagrid').datagrid('load',serializeObject(student_searchForm));
- };
- //清空
- cle = function(){
- $('#datagrid').datagrid('load',{}); //此时后台接受到的过滤条件为空,将显示全部的数据
- student_searchForm = $('#student_searchForm').form().find('input').val('');
- };
- //添加行时改变editor,password可编辑,创建时间不可编辑
- changeEditorAddRow = function(){
- $('#datagrid').datagrid('addEditor',{
- field : 'password' , //名称需要对应
- editor : {
- type : 'validatebox' , //让编辑框变成那种类型
- options : {
- required : true
- }
- }
- });
- //让创建时间不可编辑,多个时用数组['createtime',''....]
- $('#datagrid').datagrid('removeEditor','createtime');
- };
- //修改行时改变editor,密码不可编辑,创建时间开启可编辑状态
- changeEditorEditRow = function(){
- $('#datagrid').datagrid('removeEditor','password');
- $('#datagrid').datagrid('addEditor',{
- field : 'createtime' ,
- editor : {
- type : 'datetimebox' , //自定义的类型
- options : {
- required : true
- }
- }
- });
- };
- //$('.datagrid-header div').css('textAlign','center'); //让表头居中
- });
- //点击控制列的编辑按钮执行的方法
- function show(i){
- console.info(i);
- var rows = $('#datagrid').datagrid('getRows'); //得到当前页的所有行的数据,是一个数组
- console.info(rows[i]); //得到第i+1行的那么属性值
- }
- </script>
- <div class="easyui-tabs" fit="true" border="false">
- <div title="学生管理" border="false">
- <div class="easyui-layout" fit="true" border="false">
- <div region="north" title="过滤查询" border="false" style="height:100px;overflow:hidden;">
- <form id="student_searchForm">
- <table class="tableForm datagrid-toolbar" style="width:100%;height:100%">
- <tr style="width:100px;">
- <th >用户名</th>
- <td><input id="name" name="name" style="width:150px;"/></td>
- </tr>
- <tr>
- <th>创建时间</th> <!-- editable="false"表示不能手动输入信息 -->
- <td>
- <input name="createtimeStart" class="easyui-datetimebox" editable="false" style="width:100px;"/>至
- <input name="createtimeEnd" class="easyui-datetimebox" editable="false" style="width:100px;"/>
- <a href="javascript:void(0);" class="easyui-linkbutton" onclick="sel();">查询</a>
- <a href="javascript:void(0);" class="easyui-linkbutton" onclick="cle();">清空</a>
- </td>
- </tr>
- </table>
- </form>
- </div>
- <div region="center" border="false">
- <table id="datagrid" ></table>
- </div>
- <!-- 右键弹出一个菜单需要先建立一个菜单 -->
- <div id="menu" class="easyui-menu" style="width:120px; display:none;">
- <div onclick="" iconCls="icon-add">增加</div>
- <div onclick="" iconCls="icon-remove">删除</div>
- <div onclick="" iconCls="icon-edit">编辑</div>
- </div>
- </div>
- </div>
- </div>
新增就能编辑:
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>工艺流程</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <%@ include file="/WEB-INF/def/web/include/head.jsp"%>
- </head>
- <body class="easyui-layout" id="divform" style="display:none">
- <!-- 信息列表 -->
- <table id="dg" class="easyui-datagrid" style="width:100%" toolbar="#tb"
- rownumbers="true" singleSelect="true" idField="invtypeid"
- url="/cm/pub/tech/l">
- <thead>
- <tr>
- <th data-options="field:'techname',width:200"
- editor="{type:'textbox'}">工艺流程名称</th>
- <th data-options="field:'memo',width:200" editor="{type:'textbox'}">备注</th>
- <th data-options="field:'operupd',width:100" align="center"
- formatter="formatAction">操作</th>
- </tr>
- </thead>
- </table>
- <div id="tb">
- <a href="javascript:void(0)" target="_blank" class="easyui-linkbutton"
- iconCls="icon-add" plain="true" onclick="appendrow();">新增</a>
- </div>
- <!-- 删除对话框 -->
- <%@ include file="/WEB-INF/def/web/include/delmsg.jsp"%>
- </body>
- </html>
- <script language="javascript">
- $('#divform').css("display", "");
- $("#dg").css("height", $(window).height());
- var delbillid;
- var delindex;
- //初始表格
- $('#dg').datagrid({
- onBeforeEdit : function(index, row) {
- row.editing = true;
- updateActions(index);
- },
- onAfterEdit : function(index, row) {
- row.editing = false;
- updateActions(index);
- },
- onCancelEdit : function(index, row) {
- row.editing = false;
- updateActions(index);
- }
- });
- function updateActions(index) {
- $('#dg').datagrid('updateRow', {
- index : index,
- row : {}
- });
- }
- //添加修改和删除
- function formatAction(value, row, index) {
- if (row.editing) {
- var e = "<a href='javascript:void(0)' οnclick='saverow(" + index
- + ")'>确认</a> ";
- var d = "<a href='javascript:void(0)' οnclick='cancelrow(" + index
- + ")'>取消</a>";
- return e + d;
- } else {
- debugger;
- var e = "<a href='javascript:void(0)' οnclick='editrow(" + index
- + ")'>编辑</a> ";
- var d = "<a href='javascript:void(0)' οnclick='deleterow(\""
- + row.invtypeid + "\")'>删除</a>";
- return e + d;
- }
- }
- //新增行即可编辑
- function appendrow() {
- $('#dg').datagrid('appendRow', {
- techid : ''
- });
- var rows = $('#dg').datagrid('getRows');
- $('#dg').datagrid('beginEdit',rows.length - 1 );
- }
- //开始编辑
- function editrow(index) {
- $('#dg').datagrid('beginEdit', index);
- }
- //编辑取消
- function cancelrow(index) {
- $('#dg').datagrid('cancelEdit', index);
- }
- //数据保存
- function saverow(index) {
- $('#dg').datagrid('endEdit', index);
- var row = $('#dg').datagrid('getData').rows[index];
- var techname = row.techname;
- //var memo = row.memo;
- if (techname == "") {
- $.messager.alert('提示信息', "请你填写工艺流程名称");
- return;
- }
- var rows1 = $('#dg').datagrid('getRows');
- var length = rows1.length;
- for (var i = 0; i < length - 1; i++) {
- var row2 = rows1[i];
- var _techname = undefined2empty(row2.techname);
- if (techname == _techname && index != i) {
- $.messager.alert('提示信息', "工艺流程名称不可以重复 请重新输入");
- editrow(index);
- return;
- }
- }
- //var para = "invtypeid="+undefined2empty(invtypeid)+"&invtypename="+invtypename;
- $.getJSON("/cm/pub/tech/s", function(data) {
- if (data.errcode == "") {
- $.messager.alert('提示信息', "保存成功!");
- row.invtypeid = data.list[0];
- if (data.list[1] != null) {
- row.invtypecode = data.list[1];
- }
- $('#dg').datagrid('reload', index);
- } else {
- $.messager.alert('提示信息', data.errmsg);
- }
- });
- }
- //数据删除
- function deleterow(billid) {
- var index = $('#dg').datagrid("getRowIndex", billid);
- if (billid == undefined) {
- $('#dg').datagrid('cancelEdit', index);
- $('#dg').datagrid('deleteRow', index);
- return;
- }
- delbillid = billid;
- delindex = index;
- $('#dlg').dialog('open');
- $('#dlg').html("确定要删除此记录吗?");
- }
- //删除选择
- function delexcute() {
- $('#dlg').dialog('close');
- $.getJSON("/cm/pub/tech/d?techid=" + delbillid, function(data) {
- if (data.errcode == "") {
- $.messager.alert('提示信息', "删除成功!");
- $('#dg').datagrid('deleteRow', delindex);
- } else {
- $.messager.alert('提示信息', data.errmsg);
- }
- });
- }
- </script>
appendRow后获取添加行的index,调用beginEdit
- var index=$('#FlowList').datagrid('appendRow', {
- FlowTypeName: 'new name',
- FlowTypeCode: 30
- }).datagrid('getRows').length-1;
- $('#FlowList').datagrid('beginEdit',index)