11-EasyUI尚硅谷-editgrid(可编辑表格)

和datagrid的实现差不多

效果:

增:

删:

改:

------------------------------------------------------------------------------------------------------

后台代码和datagrid一样

前台代码:011_editgrid.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>Datagrid</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">

<link rel="stylesheet" type="text/css" href="js/jquery-easyui-1.2.6/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="js/jquery-easyui-1.2.6/themes/icon.css">
<script type="text/javascript" src="js/jquery-easyui-1.2.6/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js/jquery-easyui-1.2.6/jquery.easyui.min.js"></script>
<script type="text/javascript" src="js/jquery-easyui-1.2.6/locale/easyui-lang-zh_CN.js"></script>

<script type="text/javascript">

	$(function() {
		
		var rowIndex;						// undefined,限制不能添加多行标识	这两个变量在crud中逻辑比较复杂,在实际开发中要有耐心的测试改正
		var flag;							// undefined,新增或者修改
		
		// 2.使用datagrid(), 发起请求并展示列表
		$("#userList").datagrid({
			idField: "id",	// 标识字段,只要创建数据表格,就要配置这一项
			title: "可编辑的数据表格",
			//width: 1000,
			height: "auto",
			url: "UserServlet?method=findUserList",		// 异步请求的地址
			striped: true,	// 隔行变色
			nowrap: true,	// 默认情况下,当数据在同一行放不下,会折行放很多行显示,设置为true,不管多长的数据都显示在一行
			loadMsg: "正在加载,请稍等...",
			rownumbers: true,	// 行号
			//singleSelect: true,
			// 字段排序
			remoteSort: false,	// 1.取消本地排序,本地排序,即后台json数据是什么顺序,将来在页面就按什么顺序展示
			sortName: "salary",	// 2.指定排序的列字段名称
			sortOrder: "asc",	// 3.指定是按升序还是降序排序,默认是asc,即升序
			// 分页
			pagination: true,				// 表示打开分页特性
			pageList: [5,10,15,20,30,50],	// 每页显示多少条记录,自定义
			pageSize: 10,					// 设置初始化一页显示的记录数
			// 冻结列
			frozenColumns: [[
				{   // 复选框,这个特性不要和singleSelect特性一起使用,否则只能选择一条记录
				    field: "ck",
				    width: 50,
				    checkbox: true
				}                 
			]],
			fitColumns: true,	// 自适应列宽
			// 表格的列,是个二维数组,数组中是一个个对象,field的value值要和POJO中的属性值一致
			columns: [[
                {
   					field: "username",
   					title: "用户名",
   					width: 100,
   					styler: function(value, recode) {
   						if ("admin" == value) {
   							return "background:#FF83FA";
   						}
   					},
   					// 编辑器
   					editor: {
   						type: "validatebox",
   						options: {
   							required: true,
   							missingMessage: "用户名必填!",
   							validType: "minLength[2,5]"
   						}
   					}
   				},{
   					field: "password",
   					title: "密码",
   					width: 100,
   					editor: {
   						type: "validatebox",
   						options: {
   							required: true,
   							missingMessage: "密码必填!",
   							validType: "equalLength[4]"
   						}
   					}
   				},{
					field: "sex",
					title: "性别",
					width: 50,
					formatter: function(value, recode, index) {
						if (value == 1) {
							return "<span style='color:red;'>男</span>";
						} else if (value == 2) {
							return "<span style='color:green;'>女</span>";
						}
					},
					editor: {
   						type: "combobox",
   						options: {
   							data: [{id:1,val:"男"},{id:2,val:"女"}],
   							required: true,
   							missingMessage: "性别必填!",
   							valueField: "id",
   							textField: "val",
   							editable: false
   						}
   					}
				},{
					field: "age",
					title: "年龄",
					width: 50,
					editor: {
   						type: "numberbox",
   						options: {
   							required: true,
   							missingMessage: "年龄必填!",
   							min: 1,
   							max: 200,
   							precision: 0
   						}
   					}
				},{
					field: "birthday",
					title: "生日",
					width: 100,
					editor: {
   						type: "datebox",
   						options: {
   							required: true,
   							missingMessage: "生日必填!",
   							editable: false
   						}
   					}
				},{
					field: "city",
					title: "所属城市",
					width: 100,
					formatter: function(value, recode, index) {
						// 如果城市很多,这样代码很繁琐,可以把城市放到一个js文件中,然后获取这个js文件,得到城市的数组,最后遍历得到
						if (value == 1) {
							return "东莞";
						} else if (value == 2) {
							return "广州";
						} else if (value == 3) {
							return "深圳";
						} else if (value == 4) {
							return "珠海";
						} else if (value == 5) {
							return "佛山";
						}
					},
					editor: {
						type: "combobox",
						options: {
							url: "ProvinceServlet?method=findCityList",
							valueField: "id",
							textField: "name",
							required: true,
							missingMessage: "城市必填!",
							editable: false
						}
					}
				},{
					field: "salary",
					title: "薪水",
					width: 100,
					editor: {
						type: "numberbox",
						options: {
							required: true,
							missingMessage: "薪水必填!",
							min: 1510,
							max: 20000
						}
					}
				},{
					field: "starttime",
					title: "开始时间",
					width: 150,
					editor: {
						type: "datetimebox",
						options: {
							required: true, 
							missingMessage: "时间必填!",
							editable: false 
						}
					}
				},{
					field: "endtime",
					title: "结束时间",
					width: 150,
					editor: {
						type: "datetimebox",
						options: {
							required: true, 
							missingMessage: "结束时间必填!",
							editable: false 
						}
					}
				},{
					field: "description",
					title: "个人描述",
					width: 150,
					formatter: function(value, recode, index) {
						return value==undefined ? "" : "<span title="+value+">"+value+"</span>";
					},
					editor: {
						type: "validatebox",
						options: {
							required: true,
							missingMessage: "个人描述必填!",
							validType: 'minLength[5,50]',
							invalidMessage: "个人描述必须在5-50个字符之间!"
						}
					}
				}
			]],
			toolbar: [{
				text: "新增用户",
				iconCls: "icon-add",
				handler: function() {
					flag = "add";
					// 回滚
					$("#userList").datagrid("cancelEdit", rowIndex);
					// 不选中
					$("#userList").datagrid("unselectAll");
					
					if (rowIndex == undefined) {
						// 新增一行
						$("#userList").datagrid("appendRow",{});
						// 获取最后一行的行号
						rowIndex = $("#userList").datagrid("getRows").length-1;
						// 开启编辑状态
						$("#userList").datagrid("beginEdit", rowIndex);
					}
				}
			},{
				text: "删除用户",
				iconCls: "icon-remove",
				handler: function() {
					var rowObjs = $("#userList").datagrid("getSelections");
					if (rowObjs.length <= 0) {
						$.messager.show({
							title: "提示信息",
							msg: "至少选择一行记录进行删除!"
						});
						return;
					}
					$.messager.confirm("提示信息", "确定要删除吗?", function(r) {
						if (r) {
							var ids = "";
							for (var i=0; i<rowObjs.length; i++) {
								ids += rowObjs[i].id+",";
							}
							ids = ids.substring(0, ids.length-1);
							
							var url = "UserServlet?method=deleteUserByIds";
							var data = {"time": new Date(), "ids": ids};
							$.post(url, data, function(result) {
								// 取消选中
								$("#userList").datagrid("unselectAll");
                                // 刷新页面
                                $("#userList").datagrid("reload");
                                // 提示信息
								var jsonObj = $.parseJSON(result);
								$.messager.show({
									title: "提示信息",
									msg: jsonObj.status
								});
							});
						} else {
							$("#userList").datagrid("unselectAll");
						} 
					});
				}
			},{
				text: "修改用户",
				iconCls: "icon-edit",
				handler: function() {
					flag = "edit";
					// 如果选择的记录不是1条
					var rowObjs = $("#userList").datagrid("getSelections");
					if (rowObjs.length != 1) {
						$.messager.show({
							title: "提示信息",
							msg: "有且只能选择一条记录进行修改!"
						});
						return;
					}
					// 打开编辑
					if (rowIndex == undefined) {
						rowIndex = $("#userList").datagrid("getRowIndex", rowObjs[0]);
						$("#userList").datagrid("beginEdit", rowIndex);
					}
				}
			},{
				text: "保存用户",
				iconCls: "icon-save",
				handler: function() {
					// 非编辑状态下点击保存
					if (rowIndex == undefined) {	
						$.messager.show({
							title: "提示信息",
							msg: "先新增用户或修改用户,再保存用户!"
						});
						return;
					}
					// 校验指定行
					if (!$("#userList").datagrid("validateRow", rowIndex)) {	
						$.messager.show({
							title: "提示信息",
							msg: "表单校验不通过,不能提交表单!"
						});
						return;
					}
					// 结束编辑
					if ($("#userList").datagrid("validateRow", rowIndex)) {
						$("#userList").datagrid("endEdit", rowIndex);
						// 释放
						flag = undefined
						rowIndex = undefined
					}
				}
			},{
				text: "取消操作",
				iconCls: "icon-cancel",
				handler: function() {
					if (flag != undefined) {
						// 回滚数据
						$("#userList").datagrid("rejectChanges");
						// 不选中
						$("#userList").datagrid("unselectAll");
						// 释放
						rowIndex = undefined;
					}
				}
			}],
			onAfterEdit: function(rowIndex, rowData) {
				$.post(flag=="add"?"UserServlet?method=addUser":"UserServlet?method=editUser", rowData, function() {
					$.messager.show({
						title: "提示信息",
						msg: "操作成功!"
					});
				});
				// 刷新当前行
				$("#userList").datagrid("refreshRow", rowIndex);
				// 取消选中
				$("#userList").datagrid("unselectAll");
			}
		});
		// 重写了校验器
        $.extend($.fn.validatebox.defaults.rules, {
            minLength: {
                // 校验器,value:用户输入的内容    param:定义的校验数组
                validator: function(value, param) {
                    return value.length >= param[0] && value.length <= param[1];
                },
                // 如果出错,显示的提示信息
                message: "用户名必须在2-5个字符之间!"
            },
            equalLength: {
                // 校验器,value:用户输入的内容    param:定义的校验数组
                validator: function(value, param) {
                    return value.length == param[0];
                },
                // 如果出错,显示的提示信息
                message: "密码必须是4位字符!"
            }
        });
	});
	// 这是重写的datetimebox的方法,因为editor中只有datebox,没有datetimebox,所以需要重写,这段代码要放在commons.js中调用
	$.extend($.fn.datagrid.defaults.editors, {   
	    datetimebox: {   
	        init: function(container, options){   
	            var box = $('<input />').appendTo(container);   
	            box.datetimebox(options);
	            return box;   
	        },   
	        getValue: function(target){   
	            return $(target).datetimebox('getValue');   
	        },   
	        setValue: function(target, value){   
	            $(target).datetimebox('setValue',value);
	        },   
	        resize: function(target, width){   
	            var box = $(target);   
				box.datetimebox('resize' , width);
	        } ,
	        destroy:function(target){
	        	$(target).datetimebox('destroy');
	        }
	    }   
	}); 
</script>
</head>

<body style="margin: 0px 0px 0px 0px;">
	<!-- editgrid -->
	<table id="userList"></table>
</body>
</html>

 

posted @ 2017-08-01 22:58  半生戎马,共话桑麻、  阅读(358)  评论(0)    收藏  举报
levels of contents