如何在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 是在您的标记中定义的一行。

例如,如果一行是&lt;TR&gt;,那么你会写

$("#" + '<%= GridView1.ClientID %> tr.HasMenu')

否则,如果行是子 &lt;DIV&gt; 元素,您可能需要编写类似的内容

$("#" + '<%= 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中显示某行的上下文菜单的主要内容,如果未能解决你的问题,请参考以下文章

GridView中点击某行的任意位置就选中该行

如何获取GridView中某行某列的值

如何设置qtableview的某一行被选中

如何获取gridview单元格的值

在 SQL 中,如何找到某行的总和?

WPF的DataGrid中如何通过上下文菜单(右键菜单)实现删除行的操作