easyui datagrid 实现表头灵活展示(添加表头菜单,右键表头进行展示或隐藏)

Context Menu on DataGrid

Right click on the header of DataGrid to display context menu.

Context Menu on DataGrid
List Price  
Unit Cost  
Status  
36.5
10
P
18.5
12
P
38.5
12
P
26.5
12
P
35.5
12
P
158.5
12
P
83.5
12
P
23.5
12
P
89.5
12
P
63.5
92
P

实现如下效果:



源代码

 
 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Context Menu on DataGrid - jQuery EasyUI Demo</title>
  6. <link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
  7. <link rel="stylesheet" type="text/css" href="../../themes/icon.css">
  8. <link rel="stylesheet" type="text/css" href="../demo.css">
  9. <script type="text/javascript" src="../../jquery.min.js"></script>
  10. <script type="text/javascript" src="../../jquery.easyui.min.js"></script>
  11. </head>
  12. <body>
  13. <h2>Context Menu on DataGrid</h2>
  14. <p>Right click on the header of DataGrid to display context menu.</p>
  15. <div style="margin:20px 0;"></div>
  16. <table id="dg"></table>
  17. <script type="text/javascript">
  18. $(function(){
  19. $('#dg').datagrid({
  20. url: 'datagrid_data1.json',
  21. method: 'get',
  22. title: 'Context Menu on DataGrid',
  23. iconCls: 'icon-save',
  24. width: 700,
  25. height: 250,
  26. fitColumns: true,
  27. singleSelect: true,
  28. columns:[[
  29. {field:'itemid',title:'Item ID',width:80},
  30. {field:'productid',title:'Product ID',width:120},
  31. {field:'listprice',title:'List Price',width:80,align:'right'},
  32. {field:'unitcost',title:'Unit Cost',width:80,align:'right'},
  33. {field:'attr1',title:'Attribute',width:250},
  34. {field:'status',title:'Status',width:60,align:'center'}
  35. ]],
  36. onHeaderContextMenu: function(e, field){
  37. e.preventDefault();
  38. if (!cmenu){
  39. createColumnMenu();
  40. }
  41. cmenu.menu('show', {
  42. left:e.pageX,
  43. top:e.pageY
  44. });
  45. }
  46. });
  47. });
  48. var cmenu;
  49. function createColumnMenu(){
  50. cmenu = $('<div/>').appendTo('body');
  51. cmenu.menu({
  52. onClick: function(item){
  53. if (item.iconCls == 'icon-ok'){
  54. $('#dg').datagrid('hideColumn', item.name);
  55. cmenu.menu('setIcon', {
  56. target: item.target,
  57. iconCls: 'icon-empty'
  58. });
  59. } else {
  60. $('#dg').datagrid('showColumn', item.name);
  61. cmenu.menu('setIcon', {
  62. target: item.target,
  63. iconCls: 'icon-ok'
  64. });
  65. }
  66. }
  67. });
  68. var fields = $('#dg').datagrid('getColumnFields');
  69. for(var i=0; i<fields.length; i++){
  70. var field = fields[i];
  71. var col = $('#dg').datagrid('getColumnOption', field);
  72. cmenu.menu('appendItem', {
  73. text: col.title,
  74. name: field,
  75. iconCls: 'icon-ok'
  76. });
  77. }
  78. }
  79. </script>
  80. </body>
  81. </html>


补充:当使用了expandrow实现可以展开细节行的效果时候,灵活展示主表和细节表:


function formatOper(val,row){ 
return "<a id='sel' href='javascript:void(0)'  class='easyui-linkbutton' οnclick=\"selectData('"+row.WJBH+"')\" style='color:blue'>查看</a>  <a class='easyui-linkbutton' href=downSrc.action?WJBH="+row.WJBH+"  style='color:blue'>下载</a>";
} 
function selectData(WJBH){
	if(WJBH!=null){
	$('#dlg').dialog({    
	    title: '原数据展示',     
	    closed: false,    
	    cache: false, 
	    minimizable:true,
        maximizable: true,
	    href: 'selectSrc.action?WJBH='+WJBH+'',    
	    modal: false   
	});    
}else{
	$.messager.alert("提示","你查看的文件不存在");
}
}

function getTable(url)
{
	$('#grid_table').datagrid({
		url:url,
        view: detailview,
        columns :[[
               
		    {field:'DHHQYH',title:'第一列',width:65,align:'center'},
                    {field:'AZS',title:'第二列',width:65,align:'center'},
                    {field:'KVA',title:'第三列',width:65,align:'center'},
                    {field:'ZJXL',title:'第四列',width:65,align:'center'},
                    {field:'ZZXL',title:'第五列',width:65,align:'center'},
                    {field:'TJSHMD',title:'第六列',width:65,align:'center'}.
{title:'操作',field:'status',width:80,align:'center',formatter:formatOper}]], rownumbers:true, singleSelect:true, autoRowHeight:false, pagination:true, fitColumns:true, striped:true, fit:true, //用于字段动态隐藏或展示 onHeaderContextMenu: function(e, field){e.preventDefault();if (!cmenu){createColumnMenu();}cmenu.menu('show', {left:e.pageX, //pageX,pageY鼠标指针的位置,相当于文档的左边缘top:e.pageY});}, pageList:[10,15,20], pageSize:10, detailFormatter:function(index,row){ return '<div style="padding:3px"><table class="ddv'+index+'"></table></div>' + //输出结果子表1表格-段号或区域号 '<div style="padding:3px"><table class="ddt'+index+'"></table></div>'; //输出结果子表2表格-层号 }, onExpandRow: function(index,row){ // var ddv = $(this).datagrid('getRowDetail',index).find('table.ddv'); var ddv = $('.ddv'+index); //子表1表格 //输出结果子表1 ddv.datagrid({ url:"selectSondata.action?WJBH="+row.WJBH, fitColumns:true, singleSelect:true, rownumbers:true, loadMsg:'', height:'auto', columns:[[ {field:'DHHQYH',title:'第一列',width:65,align:'center'}, {field:'AZS',title:'第二列',width:65,align:'center'}, {field:'KVA',title:'第三列',width:65,align:'center'}, {field:'ZJXL',title:'第四列',width:65,align:'center'}, {field:'ZZXL',title:'第五列',width:65,align:'center'}, {field:'TJSHMD',title:'第六列',width:65,align:'center'} ]], onHeaderContextMenu:function(e,field){ //点击表头时触发 e.preventDefault(); //阻止浏览器自带的右键菜单弹出 var ddvs = $("table[class*='ddv']");// alert(ddvs.length); if(!sonMenu_1){ createSonMenu_1(ddvs,index); } //设置子表1菜单的出现位置 sonMenu_1.menu('show',{ left:e.pageX, //在鼠标右键位置 top:e.pageY //在鼠标右键位置 }); }, onResize:function(){ $('#grid_table').datagrid('fixDetailRowHeight',index); }, onLoadSuccess:function(){ setTimeout(function(){ $('#grid_table').datagrid('fixDetailRowHeight',index); },0); } }); $('#grid_table').datagrid('fixDetailRowHeight',index); //如果是第一次展开表格,还没有生成menu,会出错 if(sonMenu_1 != null && sonMenu_1 != undefined){ //是在生成菜单后展开表格,根据menu里面的勾选情况进行子表展示 var fields = ddv.datagrid('getColumnFields'); for(var i=0; i<fields.length; i++){// if($('#'+fields[i]+' > div:eq(1)').attr("class").split(" ")[1] == 'icon-ok'){// ddv.datagrid('showColumn',fields[i]);// }else if($('#'+fields[i]+' > div:eq(1)').attr("class").split(" ")[1] == 'icon-empty'){// ddv.datagrid('hideColumn',fields[i]);// } //优化修改后的 var select1 = $('#sonMenu_1 > div[id="'+fields[i]+'"] > div:eq(1)').attr("class").split(" ")[1];// console.log($('#sonMenu_1 > div[id="'+fields[i]+'"] > div:eq(1)').attr("class").split(" ")[1]);// console.log(select1); if(select1 == 'icon-ok'){ ddv.datagrid('showColumn',fields[i]); }else if(select1 == 'icon-empty'){ ddv.datagrid('hideColumn',fields[i]); } } }else{ //是在生成菜单前展开表格,默认加载前6项内容 console.log("加载前6列"); var fields = ddv.datagrid('getColumnFields'); for(var i=0; i<fields.length; i++){ if(i < 6){ ddv.datagrid('showColumn',fields[i]); }else{ ddv.datagrid('hideColumn',fields[i]); } } } /* * -------------------------------以上为输出结果子表1相关------------------------------- * * ----------------------------------分界线-------------------------------------- * * -------------------------------以下为输出结果子表2相关------------------------------- * * */ var ddt = $('.ddt'+index); //子表2表格 //输出结果子表2 ddt.datagrid({ url:"selectSondata2.action?WJBH="+row.WJBH, fitColumns:true, singleSelect:true, rownumbers:true, loadMsg:'', height:'auto', columns:[[
 		    {field:'DHHQYH',title:'第一列',width:65,align:'center'},
                    {field:'AZS',title:'第二列',width:65,align:'center'},
                    {field:'KVA',title:'第三列',width:65,align:'center'},
                    {field:'ZJXL',title:'第四列',width:65,align:'center'},
                    {field:'ZZXL',title:'第五列',width:65,align:'center'},
                    {field:'TJSHMD',title:'第六列',width:65,align:'center'}
]], onHeaderContextMenu:function(e,field){ //点击表头时触发 e.preventDefault(); //阻止浏览器自带的右键菜单弹出 var ddts = $("table[class*='ddt']"); if(!sonMenu_2){ createSonMenu_2(ddts,index); } //设置子表1菜单的出现位置 sonMenu_2.menu('show',{ left:e.pageX, //在鼠标右键位置 top:e.pageY //在鼠标右键位置 }); }, onResize:function(){ $('#grid_table').datagrid('fixDetailRowHeight',index); }, onLoadSuccess:function(){ setTimeout(function(){ $('#grid_table').datagrid('fixDetailRowHeight',index); },0); } }); //如果是第一次展开表格,还没有生成menu,会出错 if(sonMenu_2 != null && sonMenu_2 != undefined){ //是在生成菜单后展开表格,根据menu里面的勾选情况进行子表展示 var fields = ddt.datagrid('getColumnFields'); for(var i=0; i<fields.length; i++){// if($('#'+fields[i]+' > div:eq(1)').attr("class").split(" ")[1] == 'icon-ok'){// ddt.datagrid('showColumn',fields[i]);// }else if($('#'+fields[i]+' > div:eq(1)').attr("class").split(" ")[1] == 'icon-empty'){// ddt.datagrid('hideColumn',fields[i]);// } //优化修改后的 var select = $('#sonMenu_2 > div[id="'+fields[i]+'"] > div:eq(1)').attr("class").split(" ")[1];// console.log($('#sonMenu_2 > div[id="'+fields[i]+'"] > div:eq(1)').attr("class").split(" ")[1]);// console.log(select); if(select == 'icon-ok'){ ddt.datagrid('showColumn',fields[i]); }else if(select == 'icon-empty'){ ddt.datagrid('hideColumn',fields[i]); } } }else{ //是在生成菜单前展开表格,默认加载前6项内容 console.log("加载前6列"); var fields = ddt.datagrid('getColumnFields'); for(var i=0; i<fields.length; i++){ if(i < 6){ ddt.datagrid('showColumn',fields[i]); }else{ ddt.datagrid('hideColumn',fields[i]); } } } }, //默认展开第一行数据// onLoadSuccess:function(){// var me = this;// setTimeout(function () {//延时触发easyui datagrid detailviewclick事件,不用计时器无法展开,不懂什么问题~// var ss=$(me).parent().find('span.datagrid-row-expander');// $(ss[0]).trigger('click');// }, 10);// } });//默认展示主表前5项数据和最后一项数据var fieldss = $('#grid_table').datagrid('getColumnFields');for(var j=0; j<fieldss.length; j++){if(j < 5 || j == fieldss.length - 1){$('#grid_table').datagrid("showColumn",fieldss[j]);}else{$('#grid_table').datagrid("hideColumn",fieldss[j]);}}//用于输出结果主表格根据用户选择进行动态展示或隐藏字段var cmenu;function createColumnMenu(){cmenu = $('<div/>').appendTo('body');cmenu.menu({onClick: function(item){//menu点击后执行的方法,添加对勾/取消对勾,显示列/隐藏列if (item.iconCls == 'icon-ok'){$('#grid_table').datagrid('hideColumn', item.name);cmenu.menu('setIcon', {target: item.target,iconCls: 'icon-empty'});} else {$('#grid_table').datagrid('showColumn', item.name);cmenu.menu('setIcon', {target: item.target,iconCls: 'icon-ok'});}}});//生成menu列表来展示var fields = $('#grid_table').datagrid('getColumnFields');for(var i=0; i<fields.length-1; i++){var field = fields[i];if(i < 5 || i == fieldss.length - 1){var col = $('#grid_table').datagrid('getColumnOption', field);cmenu.menu('appendItem', {text: col.title,name: field,iconCls: 'icon-ok'});}else{var col = $('#grid_table').datagrid('getColumnOption', field);cmenu.menu('appendItem', {text: col.title,name: field,iconCls: 'icon-empty'});}}}//输出结果子表1的动态隐藏/展示字段var sonMenu_1function createSonMenu_1(ddvs,index){sonMenu_1 = $('<div id="sonMenu_1"/>').appendTo('body');sonMenu_1.menu({//点击某一菜单项时触发onClick:function(item){console.log("设置图标");if(item.iconCls == 'icon-ok'){for(var i=0; i<ddvs.length; i++){if($(ddvs[i]).hasClass("datagrid-f")){ //是被展开的表格$(ddvs[i]).datagrid('hideColumn',item.id); //使用ddv则多个细节行独立展示/隐藏}}sonMenu_1.menu('setIcon',{target:item.target,iconCls:'icon-empty'});}else if(item.iconCls == 'icon-empty'){for(var i=0; i<ddvs.length; i++){if($(ddvs[i]).hasClass("datagrid-f")){$(ddvs[i]).datagrid('showColumn',item.id);}}sonMenu_1.menu('setIcon',{target:item.target,iconCls:'icon-ok'});}}});//加载menu的所有列表(仅在第一次右键时候生成,今后右键不同表格都使用同一个menu)var fields = $(ddvs[index]).datagrid('getColumnFields');// console.log("进来了");$.each(fields,function(i){if(i < 6){var column = $(ddvs[index]).datagrid('getColumnOption',fields[i]);sonMenu_1.menu('appendItem',{text:column.title,iconCls: 'icon-ok', id:fields[i]});}else{var column = $(ddvs[index]).datagrid('getColumnOption',fields[i]);sonMenu_1.menu('appendItem',{text:column.title,iconCls: 'icon-empty', id:fields[i]});}});}//输出结果子表2的动态隐藏/展示字段var sonMenu_2function createSonMenu_2(ddts,index){sonMenu_2 = $('<div id="sonMenu_2"/>').appendTo('body');sonMenu_2.menu({//点击某一菜单项时触发onClick:function(item){console.log("设置图标");if(item.iconCls == 'icon-ok'){for(var i=0; i<ddts.length; i++){if($(ddts[i]).hasClass("datagrid-f")){ //是被展开的表格$(ddts[i]).datagrid('hideColumn',item.id); //使用ddv则多个细节行独立展示/隐藏}}sonMenu_2.menu('setIcon',{target:item.target,iconCls:'icon-empty'});}else if(item.iconCls == 'icon-empty'){for(var i=0; i<ddts.length; i++){if($(ddts[i]).hasClass("datagrid-f")){$(ddts[i]).datagrid('showColumn',item.id);}}sonMenu_2.menu('setIcon',{target:item.target,iconCls:'icon-ok'});}}});//加载menu的所有列表(仅在第一次右键时候生成,今后右键不同表格都使用同一个menu)var fields = $(ddts[index]).datagrid('getColumnFields');// console.log("进来了");$.each(fields,function(i){if(i < 6){var column = $(ddts[index]).datagrid('getColumnOption',fields[i]);sonMenu_2.menu('appendItem',{text:column.title,iconCls: 'icon-ok', id:fields[i]});}else{var column = $(ddts[index]).datagrid('getColumnOption',fields[i]);sonMenu_2.menu('appendItem',{text:column.title,iconCls: 'icon-empty', id:fields[i]});}});}} function validateuuid(val){//验证uuid正则 /^(?!([a-zA-Z]+|\d+)$)[a-zA-Z\d]{8,12}$/var patten = /\w*-\w*-\w*-\w*-\w*$/; return patten.test(val); } function validatedata(val){//验证数字加字母var patten =/^[0-9a-zA-Z-]{1,20}/; return patten.test(val); }function validateFloat(val){//验证小数 var patten = /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d{1,8})?$/; return patten.test(val); } function selectLike(){var flag=true;var a=$("#in1").val();if(!validateuuid(a)&&! validatedata(a)&&a!=""){flag=false;$.messager.alert("提示","请按(数字、字母、下划线)正确格式输入你要搜索的内容");return;}var b=$("#in2").val();if(!validateFloat(b)&&b!=""){flag=false;$.messager.alert("提示","请输入数字");$("#in2").focus();return;}var c=$("#in3").val();if(!validateFloat(c)&&c!=""){flag=false;$.messager.alert("提示","请输入数字");return;}var d=$("#in4").val();if(!validateFloat(d)&&d!=""){flag=false;$.messager.alert("提示","请输入数字");return;}var e=$("#in5").val();if(!validateFloat(e)&&e!=""){flag=false;$.messager.alert("提示","请输入数字");return;}var f=$("#in6").val();if(!validateFloat(f)&&f!=""){flag=false;$.messager.alert("提示","请输入数字");return;}//var g=$("#in22").val();if(!validateFloat(g)&&g!=""){flag=false;$.messager.alert("提示","请输入数字");$("#in22").focus();return;}var h=$("#in33").val();if(!validateFloat(h)&&h!=""){flag=false;$.messager.alert("提示","请输入数字");return;}var i=$("#in44").val();if(!validateFloat(i)&&i!=""){flag=false;$.messager.alert("提示","请输入数字");return;}var k=$("#in55").val();if(!validateFloat(k)&&k!=""){flag=false;$.messager.alert("提示","请输入数字");return;}var m=$("#in66").val();if(!validateFloat(m)&&m!=""){flag=false;$.messager.alert("提示","请输入数字");return;}if(b==""&&g!=""||b!=""&&g==""){flag=false;$.messager.alert("提示","请输入数字范围");return;}if(c==""&&h!=""||c!=""&&h==""){flag=false;$.messager.alert("提示","请输入数字范围");return;}if(d==""&&i!=""||d!=""&&i==""){flag=false;$.messager.alert("提示","请输入数字范围");return;}if(e==""&&k!=""||e!=""&&k==""){flag=false;$.messager.alert("提示","请输入数字范围");return;}if(f==""&&m!=""||f!=""&&m==""){flag=false;$.messager.alert("提示","请输入数字范围");return;}if(flag){var url="selectLike.action?wjbh="+a+"&yfl="+b+"&wlsh="+c+"&yyy="+d+"&sdd="+e+"&xdd="+f+" &yfl2="+g+"&wlsh2="+h+"&yyy2="+i+"&sdd2="+k+"&xdd2="+m+"";getTable(url);}}















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值