2009-06-17 7 views
1

J'ai une vue en grille qui utilise un bouton image comme bouton de mise à jour. Lorsque l'utilisateur modifie une ligne, j'aimerais que l'utilisateur puisse mettre à jour la ligne en appuyant sur Entrée. Le problème que je rencontre est que même si l'événement RowCommand est déclenché, le CommandName est toujours "Edit" au lieu de "Update " pour que mon code de mise à jour ne soit jamais exécuté, ce que j'ai fait est de javascript dans la zone de texte gestionnaire RowDataBound:Problème de mise à jour de la ligne Gridview en appuyant sur Entrée

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 

la fonction javascript est la suivante:

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

Et voici la déclaration de bouton

<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 Je clique sur le bouton de mise à jour en utilisant la souris, le nom de commande "Update" est passé comme prévu, mais pas quand je le "clique" via javascript. Toute aide serait appréciée.

Répondre

0

J'ai finalement pu y revenir avec un oeil neuf. Il s'avère que le problème est le maskededitextender de l'ajaxcontroltoolkit que j'utilise avec le champ. Je suppose que l'extension intercepte l'événement onkeypress.

Voici ma solution. Je me suis débarrassé de la maskededitextender et utilisé javascript directement à la place et ma fonction javascript assigné à l'événement onkeypress de la zone de texte:

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

Et voici le 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> 
Questions connexes