easyui datagrid 列右键 全局设置表格隐藏或显示列

来源:互联网 发布:手机版缩水软件 编辑:程序博客网 时间:2024/06/05 10:41

项目第一次用EASYUI,这个UI个人认为功能组件没有LIGERUI丰富,但是相对LIGERUI来说,EASYUI的BUG要少一些。项目中用到了动态显示或隐藏列的需求,今天查看了下官方提供的API与DEMO,找到了解决办法。我有三个解决方案,建议使用第三种。

第一种:

EASYUI官方叫法是:Context Menu on DataGrid。

官网DEMO地址:http://www.jeasyui.com/demo/main/index.php?plugin=DataGrid&theme=default&dir=ltr&pitem=

效果如下图:


以上代码是单独对一个datagrid 进行操作,如果这样,那么系统需要在页面的每个datagrid里绑定onHeaderContextMenu函数,这个函数的意思是在鼠标右击DataGrid表格头的时候触发,如果这样做那工作量又上去了,我的想法是无需开发人员做任何操作,只要加载datagrid表格即自动增加右键弹出菜单选择显示或隐藏列,若要实现这个需求,那么要改下EASYUI的源码,我用的EASYUI版本是现在最新的1.4.1。

第二种(当页面有多个datagrid时,将会有BUG):

如下步骤:

1、新建一个JS文件,命名:jquery.easyui.column.js,如下代码:

// 动态改变列头.var cmenu;function $onHeaderContextMenu(e){     e.preventDefault();     if (!cmenu){         createColumnMenu();     }     cmenu.menu('show', {         left:e.pageX,         top:e.pageY     });}function createColumnMenu() {    cmenu = $('<div/>').appendTo('body');    cmenu.menu({        onClick : function(item) {            if (item.iconCls == 'icon-ok') {                // .datagrid-f为datagrid的class名,是easyui自己加上的。                // 隐藏列。                $('.datagrid-f').datagrid('hideColumn', item.name);                cmenu.menu('setIcon', {                    target : item.target,                    iconCls : 'icon-empty'                });            } else {                // 显示列。                $('.datagrid-f').datagrid('showColumn', item.name);                cmenu.menu('setIcon', {                    target : item.target,                    iconCls : 'icon-ok'                });            }        },        onHide : function(){        }    });    var fields = $('.datagrid-f').datagrid('getColumnFields');    for (var i = 0; i < fields.length; i++) {        var field = fields[i];        var col = $('.datagrid-f').datagrid('getColumnOption', field);        cmenu.menu('appendItem', {            text : col.title,            name : field,            iconCls : 'icon-ok'        });    }}

2、找到jquery.easyui.min.js,在datagrid绑定onHeaderContextMenu时加入o$onHeaderContextMenu函数,在8266行添加该代码,如下图:

$onHeaderContextMenu(e);
如下图:



3、将jquery.easyui.min.js和jquery.easyui.column.js引入到你项目,确保所有页面都能加载到这2个JS。


第三种(推荐):

无需改源码,直接引入JS即可。

var createGridHeaderContextMenu = function(e, field) {e.preventDefault();var grid = $(this);/* grid本身 */var headerContextMenu = this.headerContextMenu;/* grid上的列头菜单对象 */var okCls = 'tree-checkbox1';// 选中var emptyCls = 'tree-checkbox0';// 取消if (!headerContextMenu) {var tmenu = $('<div style="width:100px;"></div>').appendTo('body');var fields = grid.datagrid('getColumnFields');for (var i = 0; i < fields.length; i++) {var fildOption = grid.datagrid('getColumnOption', fields[i]);if (!fildOption.hidden) {$('<div iconCls="' + okCls + '" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu);} else {$('<div iconCls="' + emptyCls + '" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu);}}headerContextMenu = this.headerContextMenu = tmenu.menu({onClick : function(item) {var field = $(item.target).attr('field');if (item.iconCls == okCls) {grid.datagrid('hideColumn', field);$(this).menu('setIcon', {target : item.target,iconCls : emptyCls});} else {grid.datagrid('showColumn', field);$(this).menu('setIcon', {target : item.target,iconCls : okCls});}}});}headerContextMenu.menu('show', {left : e.pageX,top : e.pageY});};$.fn.datagrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu;$.fn.treegrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu;


2 0
原创粉丝点击