2008-09-30 6 views
4

J'ai une page ASP.NET avec un contrôle gridview dessus avec une colonne CommandButton avec les commandes delete et select actives.Je veux empêcher ASP.NET GridView de réagir au bouton Entrée

Si vous appuyez sur la touche Entrée, le premier bouton de commande de la vue grille est activé, ce qui supprime une ligne. Je ne veux pas que cela arrive. Puis-je modifier le contrôle gridview de manière à ce qu'il ne réagisse plus à l'appui sur la touche Entrée?

Il y a aussi une zone de texte et un bouton à l'écran. Ils n'ont pas besoin d'être réactifs pour entrer, mais vous devez être en mesure de remplir la zone de texte. Actuellement, nous faisons apparaître une boîte de dialogue de confirmation pour éviter les suppressions accidentelles, mais nous avons besoin de quelque chose de mieux que cela.

C'est le balisage pour le gridview, comme vous pouvez le voir est à l'intérieur d'un UpdatePanel de asp.net (j'ai oublié de mentionner que, désolé): (je suis parti sur la plupart des colonnes et la mise en forme)

<asp:UpdatePanel ID="upContent" runat="server" UpdateMode="Conditional"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="btnFilter" /> 
      <asp:AsyncPostBackTrigger ControlID="btnEdit" EventName="Click" /> 
     </Triggers> 
     <ContentTemplate> 
      <div id="CodeGrid" class="Grid"> 
       <asp:GridView ID="dgCode" runat="server"> 
        <Columns> 
         <asp:CommandField SelectImageUrl="~/Images/Select.GIF" 
              ShowSelectButton="True" 
              ButtonType="Image" 
              CancelText="" 
              EditText="" 
              InsertText="" 
              NewText="" 
              UpdateText="" 
              DeleteImageUrl="~/Images/Delete.GIF" 
              ShowDeleteButton="True" /> 
         <asp:BoundField DataField="Id" HeaderText="ID" Visible="False" /> 
        </Columns> 
       </asp:GridView> 
      </div> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
+0

Je ne peux pas reproduire cela, ce qui me porte à croire qu'il y a quelque chose en dehors de la Gridview qui fait que le bouton de suppression répond à la touche Entrée. Avez-vous un peu de javascript en cours d'exécution sur le formulaire. Si vous pouviez poster votre balisage qui serait également utile. – dbugger

Répondre

0

Dans Page_Load, définissez le focus sur la zone de texte.

4

Chaque fois que dans un certain temps je reçois des questions loufoques comme ça aussi ... mais le plus souvent je mettre en œuvre juste un hack, et se déplacer sur :)

myGridView.Attributes.Add("onkeydown", "if(event.keyCode==13)return false;"); 

Quelque chose comme ça devrait fonctionner.

+0

Est-ce que onkeydown fonctionne de la même manière sur tous les navigateurs pour les éléments d'entrée communs? Quelqu'un ici a dit d'utiliser onkeyup à cause de certaines bizarreries de Firefox. – CMPalmer

+0

Je n'ai jamais eu de problème avec onkeydown ... et ce code fonctionne dans IE, FF, Opera et Safari depuis la dernière fois que j'ai vérifié (il y a environ un an). –

+0

cela ne fonctionne pas pour moi. L'événement onkeydown se reproduit correctement (il est là quand je vérifie avec view source), mais cela n'empêche pas l'événement de se déclencher. – stombeur

0

Voici une bonne façon de le faire: jQuery. Cette fonction ajoutera automagiquement le gestionnaire d'événements keydown à tous les TextBox sur la page. En utilisant différents sélecteurs, vous pouvez le contrôler à des niveaux plus ou moins granulaire:

//jQuery document ready function – fires when document structure loads 
$(document).ready(function() { 

    //Find all input controls of type text and bind the given 
    //function to them 
    $(":text").keydown(function(e) { 
     if (e.keyCode == 13) { 
      return false; 
     } 
    }); 

}); 

Cela fera tous les champs de saisie ignorer la touche Entrée et a l'avantage d'être appliqué automatiquement à tout nouveau HTML ou ASP.Net contrôle que vous pourriez ajouter à la page (ou qui peut être générée par ASP.Net).

0

Pour toute autre personne ayant le même problème où ce code n'empêche pas l'événement de tir, cela a fonctionné pour moi:

if (window.event.keyCode == 13) {  
    event.returnValue=false;  
    event.cancel = true; 
} 
1

En cas PreRender vous pouvez activer ou désactiver

Private Sub gvSerials_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvSerials.PreRender 
    If gvSerials.EditIndex < 0 'READ ONLY MODE 
     'Enables the form submit during Read mode on my 'search' submit button 
     Me.bnSearch.UseSubmitBehavior = True 
    Else 'EDIT MODE 
     'disables the form submit during edit mode, this allows the APPLY/Update button to be activated after Enter Key is pressed (which really is creating a form submit) 
     Me.bnSearch.UseSubmitBehavior = False 
    End If 
Questions connexes