介绍
给GridView的数据行增加右键菜单可以增加用户体验,不过实现起来挺麻烦的,现在我们扩展一下GridView控件以实现这样的功能。


控件开发
1、新建一个继承自GridView的类。
扩展GridView控件(九)——给数据行增加右键菜单_菜单/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
/// 继承自GridView
扩展GridView控件(九)——给数据行增加右键菜单_GridView_04
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_数据_05[ToolboxData(@"<{0}:SmartGridView runat='server'></{0}:SmartGridView>")]
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
public class SmartGridView : GridView
扩展GridView控件(九)——给数据行增加右键菜单_GridView_07
{
扩展GridView控件(九)——给数据行增加右键菜单_GridView_04}

2、新建一个ContextMenu实体类,有六个属性
扩展GridView控件(九)——给数据行增加右键菜单_数据_05using System;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Collections.Generic;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Text;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.ComponentModel;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Web.UI;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
namespace YYControls.SmartGridView
扩展GridView控件(九)——给数据行增加右键菜单_数据_19
{
扩展GridView控件(九)——给数据行增加右键菜单_GridView_22    
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    
/// ContextMenu 的摘要说明。
扩展GridView控件(九)——给数据行增加右键菜单_控件_25    
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03    [ToolboxItem(false)]
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    
public class ContextMenu
扩展GridView控件(九)——给数据行增加右键菜单_数据_28    
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
private string _icon;
扩展GridView控件(九)——给数据行增加右键菜单_数据_32        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 文字左边的图标的链接
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public string Icon
扩展GridView控件(九)——给数据行增加右键菜单_数据_37        
{
扩展GridView控件(九)——给数据行增加右键菜单_菜单_40            
get return _icon; }
扩展GridView控件(九)——给数据行增加右键菜单_GridView_43            
set { _icon = value; }
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
private string _text;
扩展GridView控件(九)——给数据行增加右键菜单_GridView_49        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 菜单的文字
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public string Text
扩展GridView控件(九)——给数据行增加右键菜单_菜单_54        
{
扩展GridView控件(九)——给数据行增加右键菜单_休闲_57            
get return _text; }
扩展GridView控件(九)——给数据行增加右键菜单_休闲_60            
set { _text = value; }
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03       
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
private string _commandButtonId;
扩展GridView控件(九)——给数据行增加右键菜单_数据_66        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 所调用的命令按钮的ID
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public string CommandButtonId
扩展GridView控件(九)——给数据行增加右键菜单_数据_71        
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_74            
get return _commandButtonId; }
扩展GridView控件(九)——给数据行增加右键菜单_休闲_77            
set { _commandButtonId = value; }
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
private string _navigateUrl;
扩展GridView控件(九)——给数据行增加右键菜单_休闲_83        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 链接的url
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public string NavigateUrl
扩展GridView控件(九)——给数据行增加右键菜单_菜单_88        
{
扩展GridView控件(九)——给数据行增加右键菜单_GridView_91            
get return _navigateUrl; }
扩展GridView控件(九)——给数据行增加右键菜单_数据_94            
set { _navigateUrl = value; }
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
private ItemTypeCollection _itemType;
扩展GridView控件(九)——给数据行增加右键菜单_数据_100        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 右键菜单的项的类别
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public ItemTypeCollection ItemType
扩展GridView控件(九)——给数据行增加右键菜单_数据_105        
{
扩展GridView控件(九)——给数据行增加右键菜单_休闲_108            
get return _itemType; }
扩展GridView控件(九)——给数据行增加右键菜单_菜单_111            
set { _itemType = value; }
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
private TargetCollection _target;
扩展GridView控件(九)——给数据行增加右键菜单_GridView_117        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 链接的target
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public TargetCollection Target
扩展GridView控件(九)——给数据行增加右键菜单_控件_122        
{
扩展GridView控件(九)——给数据行增加右键菜单_GridView_125            
get return _target; }
扩展GridView控件(九)——给数据行增加右键菜单_控件_128            
set { _target = value; }
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_GridView_134        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 右键菜单的项的类别
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public enum ItemTypeCollection
扩展GridView控件(九)——给数据行增加右键菜单_GridView_139        
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_142            
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
/// 链接
扩展GridView控件(九)——给数据行增加右键菜单_控件_25            
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03            Link,
扩展GridView控件(九)——给数据行增加右键菜单_数据_147            
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
/// 按钮
扩展GridView控件(九)——给数据行增加右键菜单_控件_25            
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03            Command,
扩展GridView控件(九)——给数据行增加右键菜单_控件_152            
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
/// 分隔线
扩展GridView控件(九)——给数据行增加右键菜单_控件_25            
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03            Separator
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_159        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 链接的target
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public enum TargetCollection
扩展GridView控件(九)——给数据行增加右键菜单_数据_164        
{
扩展GridView控件(九)——给数据行增加右键菜单_休闲_167            
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
/// 新开窗口
扩展GridView控件(九)——给数据行增加右键菜单_控件_25            
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03            Blank,
扩展GridView控件(九)——给数据行增加右键菜单_数据_172            
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
/// 当前窗口
扩展GridView控件(九)——给数据行增加右键菜单_控件_25            
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03            Self,
扩展GridView控件(九)——给数据行增加右键菜单_数据_177            
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
/// 跳出框架
扩展GridView控件(九)——给数据行增加右键菜单_控件_25            
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03            Top
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_25    }

扩展GridView控件(九)——给数据行增加右键菜单_GridView_04}

扩展GridView控件(九)——给数据行增加右键菜单_数据_05

3、新建一个继承自CollectionBase的类ContextMenus
扩展GridView控件(九)——给数据行增加右键菜单_数据_05using System.Collections;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.ComponentModel;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Web.UI;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
namespace YYControls.SmartGridView
扩展GridView控件(九)——给数据行增加右键菜单_数据_191
{
扩展GridView控件(九)——给数据行增加右键菜单_菜单_194    
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    
/// ContextMenus 的摘要说明。
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    
/// 注意要继承自CollectionBase
扩展GridView控件(九)——给数据行增加右键菜单_控件_25    
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03    [
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    ToolboxItem(
false),
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    ParseChildren(
true)
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    ]
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    
public class ContextMenus : CollectionBase
扩展GridView控件(九)——给数据行增加右键菜单_GridView_204    
{
扩展GridView控件(九)——给数据行增加右键菜单_休闲_207        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 构造函数
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public ContextMenus()
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            : 
base()
扩展GridView控件(九)——给数据行增加右键菜单_数据_213        
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_休闲_218        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 实现IList接口
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 获取或设置指定索引处的元素。
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// </summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// <param name="index">要获得或设置的元素从零开始的索引</param>
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// <returns></returns>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public ContextMenu this[int index]
扩展GridView控件(九)——给数据行增加右键菜单_控件_226        
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
get
扩展GridView控件(九)——给数据行增加右键菜单_控件_230            
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                
return (ContextMenu)base.List[index];
扩展GridView控件(九)——给数据行增加右键菜单_控件_25            }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
set
扩展GridView控件(九)——给数据行增加右键菜单_控件_236            
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                
base.List[index] = (ContextMenu)value;
扩展GridView控件(九)——给数据行增加右键菜单_控件_25            }

扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_休闲_243        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 实现IList接口
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 将某项添加到 System.Collections.IList 中。
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// </summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// <param name="item">要添加到 System.Collections.IList 的 System.Object。</param>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public void Add(ContextMenu item)
扩展GridView控件(九)——给数据行增加右键菜单_数据_250        
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
base.List.Add(item);
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_休闲_256        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 实现IList接口
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 从 System.Collections.IList 中移除特定对象的第一个匹配项。
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// </summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// <param name="index">要从 System.Collections.IList 移除的 System.Object</param>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public void Remove(int index)
扩展GridView控件(九)——给数据行增加右键菜单_数据_263        
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
if (index > -1 && index < base.Count)
扩展GridView控件(九)——给数据行增加右键菜单_休闲_267            
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                
base.List.RemoveAt(index);
扩展GridView控件(九)——给数据行增加右键菜单_控件_25            }

扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_休闲_274        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// ToString()
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// </summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        
/// <returns></returns>

扩展GridView控件(九)——给数据行增加右键菜单_控件_03        public override string ToString()
扩展GridView控件(九)——给数据行增加右键菜单_控件_280        
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
return "ContextMenus";
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_25    }

扩展GridView控件(九)——给数据行增加右键菜单_GridView_04}

扩展GridView控件(九)——给数据行增加右键菜单_数据_05

4、在继承自GridView的类中加一个复杂对象属性,该复杂对象就是第3步创建的那个ContextMenus
扩展GridView控件(九)——给数据行增加右键菜单_数据_05        private ContextMenus _contextMenus;
扩展GridView控件(九)——给数据行增加右键菜单_菜单_289        
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// 行的右键菜单集合
扩展GridView控件(九)——给数据行增加右键菜单_GridView_04        
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_数据_05        [
扩展GridView控件(九)——给数据行增加右键菜单_数据_05        PersistenceMode(PersistenceMode.InnerProperty),
扩展GridView控件(九)——给数据行增加右键菜单_数据_05        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
扩展GridView控件(九)——给数据行增加右键菜单_数据_05        Description(
"行的右键菜单"),
扩展GridView控件(九)——给数据行增加右键菜单_数据_05        Category(
"扩展")
扩展GridView控件(九)——给数据行增加右键菜单_数据_05        ]
扩展GridView控件(九)——给数据行增加右键菜单_数据_05        
public virtual ContextMenus ContextMenus
扩展GridView控件(九)——给数据行增加右键菜单_控件_300        
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
get
扩展GridView控件(九)——给数据行增加右键菜单_休闲_304            
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                
if (_contextMenus == null)
扩展GridView控件(九)——给数据行增加右键菜单_控件_308                
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    _contextMenus 
= new ContextMenus();
扩展GridView控件(九)——给数据行增加右键菜单_控件_25                }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03                
return _contextMenus;
扩展GridView控件(九)——给数据行增加右键菜单_控件_25            }

扩展GridView控件(九)——给数据行增加右键菜单_GridView_04        }

5、新建一个JavaScriptConstant类,把我们要用到的javascript存在一个常量里
扩展GridView控件(九)——给数据行增加右键菜单_数据_05using System;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Collections.Generic;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Text;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
namespace YYControls.SmartGridView
扩展GridView控件(九)——给数据行增加右键菜单_控件_321
{
扩展GridView控件(九)——给数据行增加右键菜单_数据_324    
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    
/// javascript
扩展GridView控件(九)——给数据行增加右键菜单_控件_25    
/// </summary>

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

扩展GridView控件(九)——给数据行增加右键菜单_GridView_04}

扩展GridView控件(九)——给数据行增加右键菜单_数据_05

6、重写OnPreRender方法,注册上面那段客户端脚本
扩展GridView控件(九)——给数据行增加右键菜单_菜单_621        /// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// OnPreRender
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// </summary>
扩展GridView控件(九)——给数据行增加右键菜单_GridView_04        
/// <param name="e"></param>

扩展GridView控件(九)——给数据行增加右键菜单_数据_05        protected override void OnPreRender(EventArgs e)
扩展GridView控件(九)——给数据行增加右键菜单_GridView_627        
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
if (ContextMenus.Count > 0)
扩展GridView控件(九)——给数据行增加右键菜单_数据_631            
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                StringBuilder sb 
= new StringBuilder();
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                
foreach (ContextMenu cm in ContextMenus)
扩展GridView控件(九)——给数据行增加右键菜单_GridView_636                
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    
// item = new contextItem("", "", "", "", "", "");
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    
// 1-菜单项的文本
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    
// 2-图标链接
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    
// 3-所调用的命令按钮的ID
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    
// 4-链接地址
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    
// 5-链接的target
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    
// 6-右键菜单的项的类别
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    
// 命令按钮
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
                    if (cm.ItemType == ContextMenu.ItemTypeCollection.Command)
扩展GridView控件(九)——给数据行增加右键菜单_菜单_649                    
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                        sb.Append(
"item = new contextItem(\"" + cm.Text +
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
                            "\", \"" + ResolveUrl(cm.Icon) + "\", \"" +
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                            cm.CommandButtonId 
+ "\", \"\", \"\", \"Command\");");
扩展GridView控件(九)——给数据行增加右键菜单_控件_25
                    }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    
// 链接
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
                    else if (cm.ItemType == ContextMenu.ItemTypeCollection.Link)
扩展GridView控件(九)——给数据行增加右键菜单_休闲_658                    
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                        sb.Append(
"item = new contextItem(\"" + cm.Text +
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
                            "\", \"" + ResolveUrl(cm.Icon) + "\", \"\", \"" +
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                            cm.NavigateUrl 
+ "\", \"" +
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                            cm.Target 
+ "\", \"Link\");");
扩展GridView控件(九)——给数据行增加右键菜单_控件_25
                    }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    
// 分隔线
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
                    else if (cm.ItemType == ContextMenu.ItemTypeCollection.Separator)
扩展GridView控件(九)——给数据行增加右键菜单_休闲_668                    
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                        sb.Append(
"item = new contextItem(\"\", \"\", \"\", \"\", \"\", \"Separator\");");
扩展GridView控件(九)——给数据行增加右键菜单_控件_25                    }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    sb.Append(
"myMenu.addItem(item);");
扩展GridView控件(九)——给数据行增加右键菜单_控件_25                }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                
// 注册客户端代码
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
                if (!Page.ClientScript.IsClientScriptBlockRegistered("jsContextMenu"))
扩展GridView控件(九)——给数据行增加右键菜单_数据_679                
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                    Page.ClientScript.RegisterClientScriptBlock(
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                        
this.GetType(),
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                        
"jsContextMenu", JavaScriptConstant.jsContextMenu.Replace("[$MakeMenu$]", sb.ToString())
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                        );
扩展GridView控件(九)——给数据行增加右键菜单_控件_25                }

扩展GridView控件(九)——给数据行增加右键菜单_控件_25            }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
base.OnPreRender(e);
扩展GridView控件(九)——给数据行增加右键菜单_GridView_04        }

扩展GridView控件(九)——给数据行增加右键菜单_数据_05

7、重写OnRowDataBound给数据行增加客户端代码以调用我们注册的那段javascript,从而实现给GridView的数据行增加右键菜单的功能。
扩展GridView控件(九)——给数据行增加右键菜单_休闲_692        /// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// OnRowDataBound
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
/// </summary>
扩展GridView控件(九)——给数据行增加右键菜单_GridView_04        
/// <param name="e"></param>

扩展GridView控件(九)——给数据行增加右键菜单_数据_05        protected override void OnRowDataBound(GridViewRowEventArgs e)
扩展GridView控件(九)——给数据行增加右键菜单_控件_698        
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
if (e.Row.RowType == DataControlRowType.DataRow)
扩展GridView控件(九)——给数据行增加右键菜单_GridView_702            
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03                
// 给数据行增加客户端代码
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
                e.Row.Attributes.Add("oncontextmenu""showMenu('" + e.Row.ClientID + "');return false;");
扩展GridView控件(九)——给数据行增加右键菜单_控件_25            }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            
base.OnRowDataBound(e);
扩展GridView控件(九)——给数据行增加右键菜单_GridView_04        }

扩展GridView控件(九)——给数据行增加右键菜单_数据_05


控件使用
添加这个控件到工具箱里,然后拖拽到webform上,设置如下属性:ItemType为右键菜单的项的类别(Link,Command,Separator);Icon为文字左边的图标的链接;Text为菜单的文字;CommandButtonId为所调用的命令按钮的ID;NavigateUrl为链接的url;Target为链接的target(Blank,Self,Top)
ObjData.cs
扩展GridView控件(九)——给数据行增加右键菜单_数据_05using System;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Data;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Configuration;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Web;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Web.Security;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Web.UI;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Web.UI.WebControls;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Web.UI.WebControls.WebParts;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.Web.UI.HtmlControls;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
using System.ComponentModel;
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
扩展GridView控件(九)——给数据行增加右键菜单_GridView_724
/// <summary>
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
/// OjbData 的摘要说明
扩展GridView控件(九)——给数据行增加右键菜单_GridView_04
/// </summary>

扩展GridView控件(九)——给数据行增加右键菜单_数据_05public class OjbData
扩展GridView控件(九)——给数据行增加右键菜单_控件_729
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    
public OjbData()
扩展GridView控件(九)——给数据行增加右键菜单_数据_733    
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
//
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
// TODO: 在此处添加构造函数逻辑
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
//
扩展GridView控件(九)——给数据行增加右键菜单_控件_25
    }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    [DataObjectMethod(DataObjectMethodType.Select, 
true)]
扩展GridView控件(九)——给数据行增加右键菜单_控件_03    
public DataTable Select()
扩展GridView控件(九)——给数据行增加右键菜单_休闲_743    
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        DataTable dt 
= new DataTable();
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        dt.Columns.Add(
"no"typeof(string));
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        dt.Columns.Add(
"name"typeof(string));
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
for (int i = 0; i < 30; i++)
扩展GridView控件(九)——给数据行增加右键菜单_菜单_751        
{
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            DataRow dr 
= dt.NewRow();
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            dr[
0= "no" + i.ToString().PadLeft(2'0');
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            dr[
1= "name" + i.ToString().PadLeft(2'0');
扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03            dt.Rows.Add(dr);
扩展GridView控件(九)——给数据行增加右键菜单_控件_25        }

扩展GridView控件(九)——给数据行增加右键菜单_控件_03
扩展GridView控件(九)——给数据行增加右键菜单_控件_03        
return dt;
扩展GridView控件(九)——给数据行增加右键菜单_控件_25    }

扩展GridView控件(九)——给数据行增加右键菜单_GridView_04}

扩展GridView控件(九)——给数据行增加右键菜单_数据_05

Default.aspx
扩展GridView控件(九)——给数据行增加右键菜单_休闲_765<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
<html xmlns="http://www.w3.org/1999/xhtml">
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
<head runat="server">
扩展GridView控件(九)——给数据行增加右键菜单_数据_05    
<title>SmartGridView测试</title>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
</head>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
<body>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05    
<form id="form1" runat="server">
扩展GridView控件(九)——给数据行增加右键菜单_数据_05        
<div>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05            
<yyc:SmartGridView ID="SmartGridView1" runat="server" DataSourceID="ObjectDataSource1"
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                AutoGenerateColumns
="false">
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                
<Columns>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
<asp:BoundField DataField="no" HeaderText="序号" SortExpression="no" ItemStyle-Width="100px" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
<asp:BoundField DataField="name" HeaderText="名称" SortExpression="name" ItemStyle-Width="100px" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
<asp:BoundField DataField="no" HeaderText="序号" SortExpression="no" ItemStyle-Width="100px" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
<asp:BoundField DataField="name" HeaderText="名称" SortExpression="name" ItemStyle-Width="100px" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
<asp:BoundField DataField="no" HeaderText="序号" SortExpression="no" ItemStyle-Width="100px" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
<asp:BoundField DataField="name" HeaderText="名称" SortExpression="name" ItemStyle-Width="100px" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
<asp:TemplateField>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                        
<footerstyle cssclass="hidden" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                        
<headerstyle cssclass="hidden" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                        
<itemstyle cssclass="hidden" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                        
<itemtemplate>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
<asp:Button id="btnRightMenuButton" runat="server" CommandName="RightMenuButton" CommandArgument='<%# Container.DataItemIndex %>' />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                
</itemtemplate>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
</asp:TemplateField>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                
</Columns>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                
<ContextMenus>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
<yyc:ContextMenu ItemType="Command" Text="右键菜单按钮测试" Icon="~/Images/button.gif" CommandButtonId="btnRightMenuButton" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
<yyc:ContextMenu ItemType="Separator" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                    
<yyc:ContextMenu ItemType="Link" Text="控件源代码" Icon="~/Images/button.gif" NavigateUrl="http://webabcd.cnblogs.com"
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                        Target
="Blank" />
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                
</ContextMenus>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05            
</yyc:SmartGridView>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05            
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Select"
扩展GridView控件(九)——给数据行增加右键菜单_数据_05                TypeName
="OjbData"></asp:ObjectDataSource>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05        
</div>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05    
</form>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
</body>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05
</html>
扩展GridView控件(九)——给数据行增加右键菜单_数据_05

注:如果想修改右键菜单的样式,请自行修改javascript,我就不把他们弄出来了。


OK