上接扩展GridView控件(9) - 给数据行增加右键菜单

本文介绍了一种使用JavaScript实现上下文菜单的方法,包括菜单项的创建、显示与隐藏功能,并详细解释了如何通过修改样式来改变菜单项的状态。
 
 

5、新建一个JavaScriptConstant类,把我们要用到的javascript存在一个常量里
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Text; 
InBlock.gif 
InBlock.gif namespace YYControls.SmartGridView 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// javascript 
InBlock.gif         /// </summary> 
InBlock.gif         public  class JavaScriptConstant 
InBlock.gif        { 
InBlock.gif                 internal  const  string jsContextMenu =  @"<script type=""text/javascript""> 
InBlock.gif                 //<![CDATA[ 
InBlock.gif                 // 数据行的ClientId 
InBlock.gif                var _rowClientId = ''; 
InBlock.gif 
InBlock.gif                 // 以下实现右键菜单,网上找的,不知道原创是谁 
InBlock.gif                function contextMenu() 
InBlock.gif                { 
InBlock.gif                         this.items =  new Array(); 
InBlock.gif                         this.addItem = function (item) 
InBlock.gif                        { 
InBlock.gif                                 this.items[ this.items.length] = item; 
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                         this.show = function (oDoc) 
InBlock.gif                        { 
InBlock.gif                                var strShow = ''; 
InBlock.gif                                var i; 
InBlock.gif 
InBlock.gif                                 // 加上word-break: keep-all; 防止菜单项换行 
InBlock.gif                                strShow =  ""<div id='rightmenu' style='word-break: keep-all;BACKGROUND-COLOR: #ffffff; BORDER: #000000 1px solid; LEFT: 0px; POSITION: absolute; TOP: 0px; VISIBILITY: hidden; Z-INDEX: 10'>""; 
InBlock.gif                                strShow +=  ""<table border='0' height='""; 
InBlock.gif                                strShow +=  this.items.length * 20; 
InBlock.gif                                strShow +=  ""' cellpadding='0' cellspacing='0'>""; 
InBlock.gif                                strShow +=  ""<tr height='3'><td bgcolor='#d0d0ce' width='2'></td><td>""; 
InBlock.gif                                strShow +=  ""<table border='0' width='100%' height='100%' cellpadding=0 cellspacing=0 bgcolor='#ffffff'>""; 
InBlock.gif                                strShow +=  ""<tr><td bgcolor='#d0d0ce' width='23'></td><td><img src=' ' height='1' border='0'></td></tr></table>""; 
InBlock.gif                                strShow +=  ""</td><td width='2'></td></tr>""; 
InBlock.gif                                strShow +=  ""<tr><td bgcolor='#d0d0ce'></td><td>""; 
InBlock.gif                                strShow +=  ""<table border='0' width='100%' height='100%' cellpadding=3 cellspacing=0 bgcolor='#ffffff'>""; 
InBlock.gif                                 
InBlock.gif                                oDoc.write(strShow); 
InBlock.gif 
InBlock.gif                                 for(i=0; i< this.items.length; i++) 
InBlock.gif                                { 
InBlock.gif                                         this.items[i].show(oDoc); 
InBlock.gif                                } 
InBlock.gif                                 
InBlock.gif                                strShow =  ""</table></td><td></td></tr>""; 
InBlock.gif                                strShow +=  ""<tr height='3'><td bgcolor='#d0d0ce'></td><td>""; 
InBlock.gif                                strShow +=  ""<table border='0' width='100%' height='100%' cellpadding=0 cellspacing=0 bgcolor='#ffffff'>""; 
InBlock.gif                                strShow +=  ""<tr><td bgcolor='#d0d0ce' width='23'></td><td><img src=' ' height='1' border='0'></td></tr></table>""; 
InBlock.gif                                strShow +=  ""</td><td></td></tr>""; 
InBlock.gif                                strShow +=  ""</table></div>\n""; 
InBlock.gif                                 
InBlock.gif                                oDoc.write(strShow); 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                function contextItem(text, icon, cmd, url, target, type) 
InBlock.gif                { 
InBlock.gif                         this.text = text ? text : ''; 
InBlock.gif                         this.icon = icon ? icon : ''; 
InBlock.gif                         this.cmd = cmd ? cmd : ''; 
InBlock.gif                         this.url = url ? url : ''; 
InBlock.gif                         this.target =target ? target : ''; 
InBlock.gif                         this.type = type ? type : 'Link'; 
InBlock.gif 
InBlock.gif 
InBlock.gif                         this.show = function (oDoc) 
InBlock.gif                        { 
InBlock.gif                                var strShow = ''; 
InBlock.gif 
InBlock.gif                                 if( this.type == 'Link' ||  this.type == 'Command') 
InBlock.gif                                { 
InBlock.gif                                        strShow +=  ""<tr ""; 
InBlock.gif                                        strShow +=  ""onmouseover=\""changeStyle( this, 'on');\" " ""; 
InBlock.gif                                        strShow +=  ""onmouseout=\""changeStyle( this, ' out');\" " ""; 
InBlock.gif 
InBlock.gif                                         if ( this.type == 'Command') 
InBlock.gif                                        { 
InBlock.gif                                                 // 右键菜单是按钮类型,调用所对应的按钮的click事件 
InBlock.gif                                                strShow +=  ""onclick=\""document.getElementById(""; 
InBlock.gif                                                strShow +=  ""_rowClientId + ""; 
InBlock.gif                                                strShow +=  ""'_""; 
InBlock.gif                                                strShow +=  this.cmd; 
InBlock.gif                                                strShow +=  ""').click()""; 
InBlock.gif                                        } 
InBlock.gif                                         else 
InBlock.gif                                        { 
InBlock.gif                                                 // 右键菜单是链接类型 
InBlock.gif                                                 if ( this.target == 'Top')  this.target = 'top'; 
InBlock.gif                                                 if ( this.target == 'Self')  this.target = 'self'; 
InBlock.gif 
InBlock.gif                                                 if ( this.target == 'top' ||  this.target == 'self') 
InBlock.gif                                                { 
InBlock.gif                                                        strShow +=  ""onclick=\""""; 
InBlock.gif                                                        strShow +=  this.target; 
InBlock.gif                                                        strShow +=  "".location='""; 
InBlock.gif                                                        strShow +=  this.url; 
InBlock.gif                                                        strShow +=  ""'""; 
InBlock.gif                                                } 
InBlock.gif                                                 else 
InBlock.gif                                                { 
InBlock.gif                                                        strShow +=  ""onclick=\""window.open('""; 
InBlock.gif                                                        strShow +=  this.url; 
InBlock.gif                                                        strShow +=  ""')""; 
InBlock.gif                                                } 
InBlock.gif                                        }        
InBlock.gif                                        strShow +=  ""\"">""; 
InBlock.gif                                        strShow +=  ""<td class='ltdexit' width='16'>""; 
InBlock.gif 
InBlock.gif                                         if ( this.icon == '') 
InBlock.gif                                        { 
InBlock.gif                                                strShow += ' '; 
InBlock.gif                                        } 
InBlock.gif                                         else    
InBlock.gif                                        { 
InBlock.gif                                                strShow +=  ""<img border='0' src='""; 
InBlock.gif                                                strShow +=  this.icon; 
InBlock.gif                                                strShow +=  ""' width='16' height='16' style='POSITION: relative'></img>""; 
InBlock.gif                                        } 
InBlock.gif 
InBlock.gif                                        strShow +=  ""</td><td class='mtdexit'>""; 
InBlock.gif                                        strShow +=  this.text; 
InBlock.gif                                        strShow +=  ""</td><td class='rtdexit' width='5'> </td></tr>""; 
InBlock.gif                                } 
InBlock.gif                                 // 右键菜单是分隔线 
InBlock.gif                                 else  if ( this.type == 'Separator') 
InBlock.gif                                { 
InBlock.gif                                        strShow +=  ""<tr><td class='ltdexit'> </td>""; 
InBlock.gif                                        strShow +=  ""<td class='mtdexit' colspan='2'><hr color='#000000' size='1'></td></tr>""; 
InBlock.gif                                } 
InBlock.gif 
InBlock.gif                                oDoc.write(strShow); 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                function changeStyle(obj, cmd) 
InBlock.gif                {    
InBlock.gif                         if(obj) 
InBlock.gif                        { 
InBlock.gif                                 try    
InBlock.gif                                { 
InBlock.gif                                        var imgObj = obj.children(0).children(0); 
InBlock.gif 
InBlock.gif                                         if(cmd == 'on')    
InBlock.gif                                        { 
InBlock.gif                                                obj.children(0).className = 'ltdfocus'; 
InBlock.gif                                                obj.children(1).className = 'mtdfocus'; 
InBlock.gif                                                obj.children(2).className = 'rtdfocus'; 
InBlock.gif                                                 
InBlock.gif                                                 if(imgObj) 
InBlock.gif                                                { 
InBlock.gif                                                         if(imgObj.tagName.toUpperCase() == 'IMG') 
InBlock.gif                                                        { 
InBlock.gif                                                                imgObj.style.left = '-1px'; 
InBlock.gif                                                                imgObj.style.top = '-1px'; 
InBlock.gif                                                        } 
InBlock.gif                                                } 
InBlock.gif                                        } 
InBlock.gif                                         else  if(cmd == ' out')    
InBlock.gif                                        { 
InBlock.gif                                                obj.children(0).className = 'ltdexit'; 
InBlock.gif                                                obj.children(1).className = 'mtdexit'; 
InBlock.gif                                                obj.children(2).className = 'rtdexit'; 
InBlock.gif 
InBlock.gif                                                 if(imgObj) 
InBlock.gif                                                { 
InBlock.gif                                                         if(imgObj.tagName.toUpperCase() == 'IMG') 
InBlock.gif                                                        { 
InBlock.gif                                                                imgObj.style.left = '0px'; 
InBlock.gif                                                                imgObj.style.top = '0px'; 
InBlock.gif                                                        } 
InBlock.gif                                                } 
InBlock.gif                                        } 
InBlock.gif                                } 
InBlock.gif                                 catch (e) {} 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                function showMenu(rowClientId) 
InBlock.gif                { 
InBlock.gif                        _rowClientId = rowClientId; 
InBlock.gif 
InBlock.gif                        var x, y, w, h, ox, oy; 
InBlock.gif 
InBlock.gif                        x =  event.clientX; 
InBlock.gif                        y =  event.clientY; 
InBlock.gif 
InBlock.gif                        var obj = document.getElementById('rightmenu'); 
InBlock.gif 
InBlock.gif                         if (obj ==  null
InBlock.gif                                 return  true
InBlock.gif 
InBlock.gif                        ox = document.body.clientWidth; 
InBlock.gif                        oy = document.body.clientHeight; 
InBlock.gif 
InBlock.gif                         if(x > ox || y > oy) 
InBlock.gif                                 return  false
InBlock.gif 
InBlock.gif                        w = obj.offsetWidth; 
InBlock.gif                        h = obj.offsetHeight; 
InBlock.gif 
InBlock.gif                         if((x + w) > ox) 
InBlock.gif                                x = x - w; 
InBlock.gif 
InBlock.gif                         if((y + h) > oy) 
InBlock.gif                                y = y - h; 
InBlock.gif 
InBlock.gif                    
InBlock.gif                         // obj.style.posLeft = x + document.body.scrollLeft; 
InBlock.gif                         // obj.style.posTop = y + document.body.scrollTop; 
InBlock.gif                         // xhtml不支持上面的了 
InBlock.gif                         // 就是说如果你的页头声明了页是xhtml的话就不能用上面那句了,vs2005创建的aspx会默认加上xhtml声明 
InBlock.gif                         // 此时应该用如下的方法 
InBlock.gif                        obj.style.posLeft = x + document.documentElement.scrollLeft; 
InBlock.gif                        obj.style.posTop = y + document.documentElement.scrollTop; 
InBlock.gif 
InBlock.gif                        obj.style.visibility = 'visible'; 
InBlock.gif 
InBlock.gif                         return  false
InBlock.gif                } 
InBlock.gif 
InBlock.gif                function hideMenu() 
InBlock.gif                { 
InBlock.gif                         if( event.button == 0) 
InBlock.gif                        { 
InBlock.gif                                var obj = document.getElementById('rightmenu'); 
InBlock.gif                                 if (obj ==  null
InBlock.gif                                         return  true
InBlock.gif 
InBlock.gif                                obj.style.visibility = 'hidden'; 
InBlock.gif                                obj.style.posLeft = 0; 
InBlock.gif                                obj.style.posTop = 0; 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                function writeStyle() 
InBlock.gif                { 
InBlock.gif                        var strStyle = ''; 
InBlock.gif 
InBlock.gif                        strStyle +=  ""<STYLE type='text/css'>""; 
InBlock.gif                        strStyle +=  ""TABLE {Font-FAMILY: 'Tahoma','Verdana','宋体'; FONT-SIZE: 9pt}""; 
InBlock.gif                        strStyle +=  "".mtdfocus {BACKGROUND-COLOR: #ccccff; BORDER-BOTTOM: #000000 1px solid; BORDER-TOP: #000000 1px solid; CURSOR: hand}""; 
InBlock.gif                        strStyle +=  "".mtdexit {BACKGROUND-COLOR: #ffffff; BORDER-BOTTOM: #ffffff 1px solid; BORDER-TOP: #ffffff 1px solid}""; 
InBlock.gif                        strStyle +=  "".ltdfocus {BACKGROUND-COLOR: #ccccff; BORDER-BOTTOM: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; CURSOR: hand}""; 
InBlock.gif                        strStyle +=  "".ltdexit {BACKGROUND-COLOR: #d0d0ce; BORDER-BOTTOM: #d0d0ce 1px solid; BORDER-TOP: #d0d0ce 1px solid; BORDER-LEFT: #d0d0ce 1px solid}""; 
InBlock.gif                        strStyle +=  "".rtdfocus {BACKGROUND-COLOR: #ccccff; BORDER-BOTTOM: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-RIGHT: #000000 1px solid; CURSOR: hand}""; 
InBlock.gif                        strStyle +=  "".rtdexit {BACKGROUND-COLOR: #ffffff; BORDER-BOTTOM: #ffffff 1px solid; BORDER-TOP: #ffffff 1px solid; BORDER-RIGHT: #ffffff 1px solid}""; 
InBlock.gif                        strStyle +=  ""</STYLE>""; 
InBlock.gif 
InBlock.gif                        document.write(strStyle); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                function makeMenu() 
InBlock.gif                { 
InBlock.gif                        var myMenu, item; 
InBlock.gif 
InBlock.gif                        myMenu =  new contextMenu(); 
InBlock.gif 
InBlock.gif                         // 增加右键菜单项 开始 
InBlock.gif                         // item = new contextItem("", "", "", "", "", ""); 
InBlock.gif                         // 1-菜单项的文本 
InBlock.gif                         // 2-图标链接 
InBlock.gif                         // 3-所调用的命令按钮的ID 
InBlock.gif                         // 4-链接地址 
InBlock.gif                         // 5-链接的target 
InBlock.gif                         // 6-右键菜单的项的类别 
InBlock.gif                         // myMenu.addItem(item); 
InBlock.gif 
InBlock.gif                        [$MakeMenu$] 
InBlock.gif                         // 增加右键菜单项 结束 
InBlock.gif 
InBlock.gif                        myMenu.show( this.document); 
InBlock.gif 
InBlock.gif                        delete item; 
InBlock.gif 
InBlock.gif                        delete myMenu; 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                function toggleMenu(isEnable) 
InBlock.gif                { 
InBlock.gif                         if(isEnable) 
InBlock.gif                                document.oncontextmenu = showMenu; 
InBlock.gif                         else 
InBlock.gif                                document.oncontextmenu =  new function() { return  true;}; 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                writeStyle(); 
InBlock.gif 
InBlock.gif                makeMenu(); 
InBlock.gif 
InBlock.gif                document.onclick = hideMenu; 
InBlock.gif                 //]]> 
InBlock.gif                </script>"; 
InBlock.gif        } 
InBlock.gif}
 
 
 




     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/345566,如需转载请自行联系原作者


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值