按下Ctrl键无法选择多行。描述了我的方法如下

时间:2013-12-17 08:42:01

标签: c# javascript asp.net gridview

我有一个奇怪的问题。我有一个隐藏字段,其值通过javascript方法更改。只要按下ctrl键在gridview中选择了行,就会设置hiddenfield的值。

这是隐藏字段的值的分配方式(Javascript代码):

var curKey;
function checkKey()
{
    //Check if contrl key is pressed or not.
    if (curKey == 17)
    {                
         document.getElementById('<%= CtrlKeyPressed.ClientID %>').value = 'Y';
    }
    else
    {
         document.getElementById('<%= CtrlKeyPressed.ClientID %>').value = 'N';
    }
}

在代码中,我在gridview_rowdatabound函数中调用了这个javasxcript,如下所示:

gridview.Rows[i].Attributes.Add("onclick","checkKey();" + ClientScript.GetPostBackEventReference(grvKanban, "Select$" + i));

在.aspx页面的主体中,代码是这样的(如果在gridview中单击任何行时按下控制键,则curKey的值将为17):

<body onkeyup = "curKey = null;" onkeydown = "curKey=event.keyCode;">

对于隐藏字段,代码为:

<asp:HiddenField ID="CtrlKeyPressed" runat="server"/>

基本上我想知道在选择gridview行时是否按下Ctrl键,我想找到Hidden字段的值。 (基本上我想按Ctrl键选择多行)

当我按下Ctrl键时,当我第一次在gridview行中单击时,隐藏字段的值变为'Y',但是当选择第二行时,隐藏字段值将变为'N'(我期待按下Ctrl键后显示为'Y'?

有人可以帮忙解决这个问题吗?

感谢!!!

1 个答案:

答案 0 :(得分:0)

可能是你的帖子重置了curKey变量的值。您应该删除此变量,而是每次都检查隐藏字段的值。

试试这个:

function setCtrlIsDown(keyCode, isDown) {
    //Check if control key is pressed or not.
    if (keyCode != 17) {
        return;
    }

    document.getElementById('<%= CtrlKeyPressed.ClientID %>').value = isDown ? 'Y' : 'N';
}

<body onkeyup="setCtrlIsDown(event.keyCode, false);" onkeydown="setCtrlIsDown(event.keyCode, true);">

RowDataBound: -

gridview.Rows[i].Attributes.Add("onclick", ClientScript.GetPostBackEventReference(grvKanban, "Select$" + i));

这样,变量不会在回发后重置,因为它将在ViewState中保留,并在客户端JavaScript根据需要进行更改。