2009-06-17 15 views
1

Ich habe eine Gridview, die eine Bildschaltfläche als Aktualisierungsschaltfläche verwendet. Wenn der Benutzer eine Zeile bearbeitet, möchte ich, dass der Benutzer die Zeile aktualisieren kann, indem er die Eingabetaste drückt. Das Problem, das ich habe, ist, dass, obwohl das RowCommand Ereignis ausgelöst wird, der CommandName immer noch "Edit" statt "Update , so dass mein Update-Code nie ausgeführt wird. Was ich getan habe, ist ein paar Javascript an die Textbox in der RowDataBound Handler:Problem beim Aktualisieren der Gridview-Zeile durch Drücken der Eingabetaste

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 

die Javascript-Funktion ist wie folgt:

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; 
      } 
     } 
    } 
} 

Und hier ist die Schaltfläche Erklärung

<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> 

I f Ich klicke auf den Update-Button mit der Maus, der CommandName "Update" wird wie erwartet übergeben, nur nicht, wenn ich ihn per Javascript "klicke". Jede Hilfe wäre willkommen.

Antwort

0

Endlich konnte ich mit einem neuen Blick darauf zurückkommen. Es stellt sich heraus, dass das Problem der maskededitextender aus dem ajaxcontroltoolkit ist, den ich mit dem Feld verwende. Ich vermute, dass der Extender das Onkeypress-Ereignis abfängt.

Hier ist meine Lösung. Ich habe von dem maskededitextender befreien und gerade Javascript stattdessen verwendet und meine Javascript-Funktion, um die onkeypress Ereignis Textbox zuzugewiesenen:

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

Und hier ist das 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> 
Verwandte Themen