标签:
下面这个是一个单独的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)' onclick='saverow(" + index
+ ")'>确认</a> ";
var d = "<a href='javascript:void(0)' onclick='cancelrow(" + index
+ ")'>取消</a>";
return e + d;
} else {
debugger;
var e = "<a href='javascript:void(0)' onclick='editrow(" + index
+ ")'>编辑</a> ";
var d = "<a href='javascript:void(0)' onclick='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)Jquery easyui开启行编辑_增删改操作及新增就能编辑
标签:
原文地址:http://blog.csdn.net/qq_16769857/article/details/51906717