Pergunta

Eu tenho uma página ASP.NET com um controle gridview nele com uma coluna de CommandButton com comandos excluir e selecione ativos.

Ao pressionar a tecla Enter faz com que o primeiro botão de comando na gridview ao fogo, que exclui uma linha. Eu não quero que isso aconteça. Posso alterar o controle gridview de uma forma que não reage mais a pressionar a tecla enter?

Há uma caixa de texto e botão na tela também. Eles não precisam de ser sensível ao bater entrar, mas você deve ser capaz de preencher a caixa de texto. Atualmente aparecer uma janela de confirmação para evitar exclusões acidentais, mas precisamos de algo melhor do que isso.

Esta é a marcação para a gridview, como você pode ver que é dentro de um updatepanel asp.net (i esqueceu de mencionar que, sorry): (eu deixei de fora a maioria das colunas ea formatação)

<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>
Foi útil?

Solução

Esta solução está bloqueando a tecla enter em toda a página

Desativar Tecla Enter

Outras dicas

De vez em quando eu fico questões patetas como este também ... mas geralmente eu apenas implementar um corte rápido, e seguir em frente:)

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

Algo assim deve funcionar.

No caso PreRender você pode alternar

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

Em Page_Load, definir o foco na caixa de texto.

Aqui está uma boa jQuery maneira de fazê-lo. Esta função irá automagicamente adicionar o manipulador de eventos keydown a todos os TextBoxes na página. Usando diferentes seletores, você pode controlá-lo a níveis mais ou menos granulares:

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

});

Isso fará com que todas as caixas de texto ignora a tecla Enter e tem a vantagem de ser aplicada automaticamente a qualquer novo HTML ou controles ASP.NET que você pode adicionar à página (ou que podem ser gerados pelo ASP.Net).

Para qualquer outra pessoa com o mesmo problema em que este código não está impedindo que o evento de disparo, isso funcionou para mim:

if (window.event.keyCode == 13) {    
    event.returnValue=false;     
    event.cancel = true;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top