如何在gridView中的某些行显示上下文菜单

时间:2012-04-23 09:05:49

标签: c# javascript jquery asp.net gridview

我有一个gridview,它绑定到一个数据表。我想为有条件的行添加上下文。我在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类的行上显示任何上下文菜单(不是资源管理器上下文菜单而不是我的自定义上下文菜单),并且显示了具有{{1的行的上下文菜单我的脚本需要改变什么?

感谢

1 个答案:

答案 0 :(得分: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')