按Enter键更新Gridview行时出现问题

时间:2009-06-17 21:27:04

标签: asp.net gridview

我有一个使用图像按钮作为更新按钮的gridview。当用户编辑一行时,我希望用户能够通过按Enter更新该行。我遇到的问题是虽然触发了RowCommand事件,但CommandName仍然是“编辑”而不是“更新”  所以我的更新代码永远不会被执行。我所做的是将一些javascript连接到RowDataBound处理程序中的文本框:

 Protected Sub uxShoppingCart_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then
            Dim gvr As GridViewRow = DirectCast(e.Row, GridViewRow)
            If (e.Row.RowState And DataControlRowState.Edit) = DataControlRowState.Edit Then
                Dim edit_Qty As TextBox = DirectCast(gvr.FindControl("edit_Qty"), TextBox)
                Dim uxUpdateButton As ImageButton = DirectCast(gvr.FindControl("uxUpdateButton"), ImageButton)
                uxQty.Attributes.Add("onkeypress", "return clickButton(event,'" & uxUpdateButton.ClientID & "')")
                edit_Qty.Focus()
            End If
        End If
    End Sub

javascript函数如下:

function clickButton(e, buttonid) {
    var bt = document.getElementById(buttonid);
    if (typeof bt == 'object') {
        if (navigator.appName.indexOf("Netscape") > (-1)) {
            if (e.keyCode == 13) {
                bt.click();
                return false;
            }
        }
        if (navigator.appName.indexOf("Microsoft Internet Explorer") > (-1)) {
            if (event.keyCode == 13) {
                bt.click();
                return false;
            }
        }
    }
}

这是按钮声明

<EditItemTemplate>
    <span style="display: inline; white-space: nowrap;">
        <asp:ImageButton ID="uxUpdateButton" runat="server" CausesValidation="True" CommandName="Update" ImageUrl="~/images/icons/accept.png" AlternateText="Update" ToolTip="Update"></asp:ImageButton>
        <asp:ImageButton ID="uxCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" ImageUrl="~/images/icons/cancel.png" AlternateText="Cancel" ToolTip="Cancel"></asp:ImageButton>
    </span>
</EditItemTemplate>

如果我使用鼠标单击更新按钮,CommandName“Update”会按预期传递,而不是当我通过javascript“点击”它时。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我终于能够以清新的眼光回到这一点。事实证明问题是来自ajaxcontroltoolkit的maskededitextender,我正在使用该字段。我猜这个扩展器正在拦截onkeypress事件。

这是我的解决方案。我摆脱了maskededitextender并使用直接javascript代替我将javascript函数分配给文本框的onkeypress事件:

AddQty.Attributes.Add("onkeypress", "return NumericInput(event,'" & uxAddButton.ClientID & "')") 

这是javascript:

<script type="text/javascript">
    function NumericInput(e, id) {
        if (!e) e = window.event;
        if (e.keyCode > 31 && (e.keyCode < 48 || e.keyCode > 57)) {
            return false;
        } else {
            if (e.keyCode == 13) {
                var bt = document.getElementById(id);
                if (bt != null) {
                    bt.click();
                    return false;
                }
            }
        }
    } 
 </script>