如何在gridView中显示某行的上下文菜单
Posted
技术标签:
【中文标题】如何在gridView中显示某行的上下文菜单【英文标题】:How to Show Context Menu for some row in gridView 【发布时间】:2012-05-03 21:24:50 【问题描述】:我有一个绑定到数据表的网格视图。我想为有条件的行添加上下文。我在RowDataBound
事件中使用此代码:
if (e.Row.Enabled == true && e.Row.Cells[6].Enabled == true)
e.Row.CssClass = "HasMenu";
现在我编写这段代码来在网格上显示上下文菜单:
$(document).ready(function ()
$('#menu').click(function ()
$('#menu').hide();
);
$(document).click(function ()
$('#menu').hide();
);
$("#" + '<%= GridView1.ClientID %>').bind("contextmenu", function (e)
$('#menu').css(
top: e.pageY + 'px',
left: e.pageX + 'px'
).show();
return false;
);
);
问题是我没有在没有HasMenu
css 类的行上显示任何上下文菜单(不是资源管理器上下文菜单,也不是我的自定义上下文菜单),而是为具有HasMenu
css 类的行显示上下文菜单.我的脚本需要什么改变?
谢谢
【问题讨论】:
【参考方案1】:现在您正在收听整个 gridview 的 contextmenu
事件:
$("#" + '<%= GridView1.ClientID %>')
您需要将其更改为单个行:
$('#" + '<%= GridView1.ClientID %> rowselector.HasMenu')
rowselector
是在您的标记中定义的一行。
例如,如果一行是<TR>
,那么你会写
$("#" + '<%= GridView1.ClientID %> tr.HasMenu')
否则,如果行是子 <DIV>
元素,您可能需要编写类似的内容
$("#" + '<%= GridView1.ClientID %> > div.HasMenu')
请注意,您连接的是两个纯字符串,不涉及任何 javascript 变量。你不妨写:
$('#<%= GridView1.ClientID %> rowselector.HasMenu')
【讨论】:
它导致IE上下文菜单出现在没有HasMenu
类的行上
@Kerezo:是的,一开始我没有注意到您将侦听器添加到整个菜单中。查看我的编辑。
如果浏览器是 IE 并且 Row 没有 HasMenu 类,则在 contextmenu 处理程序期间返回 false
谢谢,但请帮帮我,我不知道怎么写:Rows doea not have HasMenu
in selector
@Kerezo:完整的选择器将归结为如何在您的标记中定义行,但无论行选择器是什么,您都可以将其附加.HasMenu
以仅在它具有类时选择, :not(.HasMenu')
仅在它缺少该类时选择,或.hasClass('HasMenu')
用于测试它是否具有该类。以上是关于如何在gridView中显示某行的上下文菜单的主要内容,如果未能解决你的问题,请参考以下文章