java_easyui体系之DataGrid(5)



一:简介


        最后一个关于datagrid的文章、是对datagrid的常用的方法、属性的一点补充:

        1、  formatter的介绍与使用

        2、  datagrid的样式的修改

        3、  整体效果图:


java datagrid java datagrid 行值_easyuiFormatter


二:formatter的使用



        1、formatter简单介绍:



                a)        formatter是columnsproperty、用于列属性:三个参数——value:当前列的值、rowData当前行的值、rowIndex:当前行的索引。

                b)        formatter 一定返回一个字符串。这个字符串用于页面上这一列的显示。

 

        2、formatter用法:



                a)        通过formatter在datagrid中追加一行存放操作数据的按钮、并为按钮添加点击函数、通过rowIndex获取行数据进行修改删除:追加一个控制列、包含编辑、删除两个按钮。


}, {  
                title : '控制',  
                field : 'id',  
                width : 200,//必须要给  
                formatter: function(value,rowData,index){
                	//注意这里不能传rowData、rowData是一个对象、不能在字符串中传递一个对象。这里可以通过index获取对应rowData
                	return '<button οnclick="updateUserByButton('+index+')">编辑</button><button>删除</button>';
    			}
            }



                b)        使用指定内容改变原有列显示内容:将密码一栏用六个”*“代替


columns : [ [ {  
                title : '密码',    
                field : 'passWord',  
                width : 200,//必须要给  
                editor : {  
                    type:'validatebox',  
                    options:{  
                        required: true,  
                    }  
                },
                formatter: function(value,rowData,index){
                	//必须返回一个字符串、用于替换被加formatter的单元格。
                	return '******';
					//鼠标移上去弹出一个提示、原理是可以将返沪的字符串以HTML的格式来解析        
					//return '<a title="'+value+'">'+value+'</a>';
    			}
                
                
            }




                c)        当鼠标悬停在某列时、完整显示这一列的内容:悬停在修改时间栏显示完整修改时间


三:样式的修改



        1、修改行样式



直接在datagrid初始化时:加上下面代码、if是判断那些行会被修饰


$('#datagrid').datagrid({  
        	//行样式
        	rowStyler: function(index,row){
        		if (row.userName == 'chy'){
        			return 'background-color:#6293BB;color:#fff;'; // return inline style
        		}
        	},




        2、修改列样式



在列属性上加:

}, {  
                title : '姓名',  
                field : 'userName',  
                width : 100,//必须要给  
                editor : {   
                    type:'validatebox',  
                    options:{  
                        required: true,  
                    }  
                },
                styler: function(value,row,index){
    				if (row.userName != ''){
    					return 'background-color:#ffee00;color:red;';
    					// the function can return predefined css class and inline style
    					// return {class:'c1',style:'color:red'}
    				}
    			}  
            }


四:补充

 

1、  formatter 格式日期没有实现、扩展的方法调用不到、回头再看看。

2、  不要在一个datagrid中出现两个相同的field


完整user.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  <body>
    <script type="text/javascript">  
    var editRow = undefined;//用于存放当前编辑行的index  
    $(function() {  
       
        $('#datagrid').datagrid({  
        	//行样式
        	rowStyler: function(index,row){
        		if (row.userName == 'chy'){
        			return 'background-color:#6293BB;color:#fff;'; // return inline style
        		}
        	},
        	
            url : 'login_getUserJson.action',  
            title : '用户列表',  
            iconCls : 'icon-save',  
            pagination : true,  
            pageSize : 10,  
            pageList : [ 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 ],  
            fit : true,//使表格自适应  
            fitColumns : false,//当使用冻结列:frozenColumms的时候必须设置为false或者不写  
            nowrap : false,//表格中的文字可以换行、默认是false、不能换行、这样在文字很多的时候就看不到全部:使用真实的数据去测试  
            border : false,  
            idFeild : 'id',//标识、会记录我们选中项的id、不一定是id、通常使用主键  
            sortName : 'id',//设置默认排序时的 字段(必须是field中的一个字段)  
            sortOrder : 'asc',//是按照升序还是降序排序 但是仅仅添加这两个字段并不会自动排序、这样写的意义就是前台会自动的向后台传递两个参数:sort order,我们可以在后台查询记录的时候进行排序  
            frozenColumns : [[{//冻结列、不管数据列再多、拖动下方滚动条时、其中的列都不会滚动(这些列下方根本就没有滚动条)、参数与columns一样、注意:双中括号——[[{xxx},{xxx}]]
            	title : '编号',  
                //field : 'id',  
                width : 100,//必须要给  
                checkbox : true,  
                  
            }, {  
                title : '姓名',  
                field : 'userName',  
                width : 100,//必须要给  
                editor : {   
                    type:'validatebox',  
                    options:{  
                        required: true,  
                    }  
                },
                styler: function(value,row,index){
    				if (row.userName != ''){
    					return 'background-color:#ffee00;color:red;';
    					// the function can return predefined css class and inline style
    					// return {class:'c1',style:'color:red'}
    				}
    			}  
            } ]],
            columns : [ [ {  
                title : '密码',    
                field : 'passWord',  
                width : 200,//必须要给  
                editor : {  
                    type:'validatebox',  
                    options:{  
                        required: true,  
                    }  
                },
                formatter: function(value,rowData,index){
                	//必须返回一个字符串、用于替换被加formatter的单元格。
                	return '******';
					//鼠标移上去弹出一个提示、原理是可以将返沪的字符串以HTML的格式来解析        
					//return '<a title="'+value+'">'+value+'</a>';
    			}
                
                
            }, {  
                title : '创建时间',  
                field : 'createTime',  
                width : 200,//必须要给  
                editor : {  
                    type:'datetimebox',//扩展的用于选择具体时间的类型  
                    options:{  
                        required: true,  
                    }  
                },
                align:'center',//修改列中内容align属性。
                formatter : function(value,rowData,rowIndex){
                	//使用返回的html格式的字符串提示此列显示内容
                	return '<a title="'+value+'">'+value+'</a>';
                }
            }, {  
                title : '修改时间',  
                field : 'updateTime',  
                width : 200,//必须要给  
                editor : {  
                    type:'datetimebox',//扩展的用于选择具体时间的类型  
                    options:{  
                        required: true,  
                    }  
                },
                /* 暂时没有效果、引入不了新增的Date.fromat()方法
                formatter: function(v){//这里写死看一下效果、没有动后台代码
                	//格式化后台传过来的长整型类型
                	console.info(formatTime(1389085540250));
                	return formatTime(1389085540250);
    			}
                */
            }, {  
                title : '控制',  
                field : 'id',  
                width : 200,//必须要给  
                formatter: function(value,rowData,index){
                	//注意这里不能传rowData、rowData是一个对象、不能在字符串中传递一个对象。这里可以通过index获取对应rowData
                	return '<button οnclick="updateUserByButton('+index+')">编辑</button><button>删除</button>';
    			}
            } ] ],  
            toolbar : [ {  
                text : '增加',  
                iconCls : 'icon-add',  
                handler : function() {  
                	privateAddUser();  
                }  
            }, '-', {  
                text : '删除',  
                iconCls : 'icon-remove',  
                handler : function() {
                	privateDelUsers();
                }  
            }, '-', {  
                text : '修改',  
                iconCls : 'icon-edit',  
                handler : function() {
                	privateUpdateUser();
                }  
            }, '-',{  
                text : '保存',  
                iconCls : 'icon-save',  
                handler : function() {  
                    $('#datagrid').datagrid('endEdit', editRow);  
                }  
            }, '-',{  
                text : '取消编辑',  
                iconCls : 'icon-undo',  
                handler : function() {  
                    //将事务回滚、取消选中的行  
                    editRow = undefined;  
                    $('#datagrid').datagrid('rejectChanges');  
                    $('#datagrid').datagrid('unselectAll');  
                }  
            }, '-',{  
                text : '取消选中',  
                iconCls : 'icon-undo',  
                handler : function() {  
                    $('#datagrid').datagrid('unselectAll');  
                }  
            }, '-',{  
                text : '清空显示',  
                iconCls : 'icon-undo',  
                handler : function() {  
                    $('#datagrid').datagrid('loadData', []);  
                }  
            }, '-',{  
                text : '还原显示',  
                iconCls : 'icon-redo',  
                handler : function() {  
                    $('#datagrid').datagrid('load');  
                }  
            }, '-' ],  
            onAfterEdit : function(rowIndex, rowData, changes){  
                /*
                 *  如何区别是添加、还是修改?
                 */
                //获取所有插入的行信息
                var inserted = $('#datagrid').datagrid('getChanges','inserted');
                //获取所有被修改的行信息
                var updated = $('#datagrid').datagrid('getChanges','updated');
                //传入后台的url、根据到底是添加、还是修改动态改变、即进入Action中不同的方法。
                var url = '';
                if(inserted.length > 0){
                	url='login_addUser.action';
                }
                if(updated.length > 0){
                	url='login_updateUser.action';
                }
                $.ajax({
                	url : url,
                	data : rowData,
                	dataType : 'json',
                	success : function(r){
                		if(r.success && r){
                			//如果成功、则确定显示操作之后的行信息、即点击撤销的时候不会回滚事务(仅是前台、此时后台关于数据库的已经处理)。
                			$('#datagrid').datagrid('acceptChanges');
                			//给出提示、是通过后台传过来的一个json对象
                			$.messager.show({
                				title : '提示',
                				msg : r.msg,
                			});
                		}else{
                			//如果失败、则回滚事务(仅是前台、此时后台关于数据库的已经处理)。
                			$('#datagrid').datagrid('rejectChanges');  
                			$.messager.alert('错误',r.msg,'error');
                	 	}
                		editRow = undefined; 
                		$('#datagrid').datagrid('unselectAll');
                	}
                });
            },  
            //双击修改行  
            onDblClickRow : function(rowIndex, rowData){  
            	changeUpdateEditor();  
                $('#datagrid').datagrid('unselectAll');  
                if(editRow != undefined){  
                    $('#datagrid').datagrid('endEdit', editRow);  
                    editRow = undefined;
                }  
                if(editRow == undefined){  
                    $('#datagrid').datagrid('beginEdit',rowIndex);  
                    editRow = rowIndex;  
                }  
            },
          	//显示右键菜单、并且设置显示位置就是触发鼠标右击的位置。
            onRowContextMenu : function(e, rowIndex, rowData){
            	//1、阻止原来浏览器右键事件
            	e.preventDefault();
            	$(this).datagrid('unselectAll');  
            	$(this).datagrid('selectRow', rowIndex);
            	//显示自定义右键菜单
                $('#mm').menu('show', {
                	//动态显示右键菜单位置
                    left: e.pageX,
                    top: e.pageY
                 });
            }
        });
        //将表头内容居中
        $('.datagrid-header div').css('textAlign', 'center');
    });  
  	/* 
  	 * 右键菜单功能
  	 */
  	//添加记录
    function addUser(){
    	privateAddUser();
    }
    
    //修改记录
    function updateUser(){
    	privateUpdateUser();
    }
    
    //删除记录
    function delUsers(){
    	privateDelUsers();
    }
    
    function privateDelUsers(){
    	var rows = $('#datagrid').datagrid('getSelections');  
        if(rows.length > 0){  
            $.messager.confirm('请确认','您确定要删除当前选择的'+rows.length+'项吗?', function(option){  
                if(option){  
                    //一般将id的一个集合传到后台删除  
                    var ids = [];  
                    for(var i = 0; i< rows.length; i++){  
                        ids.push(rows[i].id);  
                    }  
                    console.info(ids.join(','));  
                    $.ajax({
                    	url : 'login_delUsers.action',
                    	data : {
                    		ids : ids.join(',')
                    	},
                    	dataType : 'json',
                    	success : function(r){
                    		 $('#datagrid').datagrid('load');
                    		 $('#datagrid').datagrid('unselectAll');
                    		 $.messager.show({
                    			 title : '提示',
                    			 msg : '删除成功'
                    		 });
                    	}
                    });
                }  
            });  
        }else{  
            $.messager.alert('提示', '请选择要删除的记录', 'error');  
        }
    }
    
    function privateUpdateUser(){
    	 var rows = $('#datagrid').datagrid('getSelections');  
         if(rows.length ==1){  
         	changeUpdateEditor();  
             if(editRow != undefined){  
                 $('#datagrid').datagrid('endEdit', editRow);
                 editRow = undefined;
             }  
             if(editRow == undefined){  
                 var rowIndex = $('#datagrid').datagrid('getRowIndex',rows[0]);  
                 $('#datagrid').datagrid('beginEdit',rowIndex);  
                 editRow = rowIndex;  
                 $('#datagrid').datagrid('unselectAll');  
             }  
         }else if( rows.length == 0){  
             $.messager.alert('提示', '请选择一条修改记录!','info');  
         }else if(rows.length >= 1){  
             $.messager.alert('提示', '只能选择一条修改记录!','info');  
         }
    }
    
    function privateAddUser(){
    	if(editRow != undefined){  
            $('#datagrid').datagrid('endEdit', editRow);  
        }  
        if(editRow == undefined){  
        	//新增的时候不让用户选择创建时间、应该用后台自动生成的当前的时间
        	changeAddEditor();
            $('#datagrid').datagrid('insertRow', {  
                index : 0,  
                row : {  
                    userName:'请输入名称',  
                    passWord:'请输入密码'  
                }  
            });  
            editRow = 0;  
            $('#datagrid').datagrid('beginEdit',0);  
        }  
    }
    
    //查询数据  
    function show() {  
    	console.info(serializeObject($('#searchForm')));
        $('#datagrid').datagrid('load', serializeObject($('#searchForm')));  
    }  
  
    //清除查询条件、返回初始数据展示状态  
    function clean() {  
        $('#datagrid').datagrid('load', {});  
        $('#searchForm').find('input').val('');  
    } 
    
    //添加行时改变editor
    function changeAddEditor(){
    	$('#datagrid').datagrid('removeEditor', ['updateTime','createTime']);  
        $('#datagrid').datagrid('addEditor', {  
            field : 'passWord',  
            editor : {  
                type:'validatebox',  
                options:{  
                    required: true,  
                }  
            }  
        });  
    } 
    
    //修改行是改变editor
    function changeUpdateEditor(){
    	$('#datagrid').datagrid('removeEditor','passWord');  
    	 $('#datagrid').datagrid('addEditor', [{  
             field : 'createTime',  
             editor : {  
                 type:'datetimebox',//扩展的用于选择具体时间的类型  
                 options:{  
                     required: true,  
                 }  
             }   
         },{  
             field : 'updateTime',  
             editor : {  
                 type:'datetimebox',//扩展的用于选择具体时间的类型  
                 options:{  
                     required: true,  
                 }  
             }  
         }]);  
    }
    
    function updateUserByButton(rowIndex){
    	console.info(rowIndex);
    	//通过rowIndex获取指定行数据
    	var rows = $('#datagrid').datagrid('getRows');  
    	console.info(rows[rowIndex]);
    }
    
    
</script>  
  
<div class="easyui-layout" data-options="fit:true,border:false,">  
    <div data-options="region:'north',border:false,title:'过滤'"  
        style="height: 140px;overflow: hidden">  
        <form id="searchForm">  
            <table class="datagrid-toolbar" style="height:100%;width:100%">  
                <tr>  
                    <th>用户名</th>  
                    <td><input id="username" name="username" style="width: 320px" />  
                    </td>  
                </tr>  
                <tr>  
                    <th>创建时间</th>  
                    <td><input name="createTimeStart" editable="false"  
                        class="easyui-datetimebox" style="width:155px;" /> 至 <input  
                        name="createTimeEnd" editable="false" class="easyui-datetimebox"  
                        style="width:155px;" /></td>  
                </tr>  
                <tr>  
                    <th>修改时间</th>  
                    <td><input name="modifyTimeStart" editable="false"  
                        class="easyui-datetimebox" style="width:155px;" /> 至 <input  
                        name="modifyTimeEnd" editable="false" class="easyui-datetimebox"  
                        style="width:155px;" /> <a class="easyui-linkbutton"  
                        οnclick="show();">查询</a> <a class="easyui-linkbutton"  
                        οnclick="clean();">清空</a></td>  
                </tr>  
            </table>  
        </form>  
  
    </div>  
  
    <div data-options="region:'center',border:false">  
        <table id="datagrid"></table>  
    </div>  
	<%-- 通过指定class的方式、构造右键菜单--%>
  	<div id="mm" class="easyui-menu" style="width:120px;display:none;">
 		<div οnclick="addUser()" iconCls="icon-add">增加</div>
 		<div οnclick="delUsers()" iconCls="icon-remove">删除</div>
 		<div οnclick="updateUser()" iconCls="icon-edit">编辑</div>
 	</div>
</div>  
  </body>
</html>