我有一个使用图像按钮作为更新按钮的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“点击”它时。任何帮助将不胜感激。
答案 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>