Eu quero evitar ASP.NET GridView de reagir ao botão enter
-
02-07-2019 - |
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>
Solução
Esta solução está bloqueando a tecla enter em toda a página
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;
}