【问题标题】:How to Show Context Menu for some row in gridView如何在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 类的行显示上下文菜单.我的脚本需要什么改变?

谢谢

【问题讨论】:

    标签: c# javascript jquery asp.net gridview


    【解决方案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') 用于测试它是否具有该类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多