Usuário com melhor resposta
Disparar RowCommand através do TextBox

Pergunta
-
Respostas
-
<asp:GridView ID="gvServico" DataKeyNames="GrupoId" Width="99.5%" runat="server" ShowHeader="false" AutoGenerateColumns="false" OnRowCommand="gvServicoProdutos_RowCommand"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:TextBox ID="txtMargem" OnTextChanged="txtMargem_TextChanged" runat="server" Width="95%" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <ItemTemplate> <asp:TextBox ID="txtPrecoVenda" runat="server" MaxLength="17" CssClass="moeda" Width="95%" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <ItemTemplate> <asp:ImageButton ID="imgQuebraExecucao" Width="0" Height="0" runat="server" CommandName="QuebraExecucao" /> <asp:ImageButton ID="imgExcluir" runat="server" CommandName="Excluir" CommandArgument='<%# Eval("GrupoId") %>' ImageAlign="Middle" ImageUrl="~/Imagens/Site/0.gif" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
protected void txtMargem_TextChanged(object sender, EventArgs e) { TextBox tb1 = ((TextBox)(sender)); GridViewRow gv1 = ((GridViewRow)(tb1.NamingContainer)); int rownumber = gv1.RowIndex; } protected void gvServicoProdutos_RowCommand(object sender, GridViewCommandEventArgs e) {
//Após executar o TexChanged o CommandName -> QuebraExecucao sera acionado
if (e.CommandName == "Excluir") { string servicoId = e.CommandArgument.ToString(); //... } }
- Marcado como Resposta Pedro Ogm sexta-feira, 18 de maio de 2012 14:14
Todas as Respostas
-
Fala Pedro,
De uma olhada neste link:
http://msdn.microsoft.com/pt-br/library/system.web.ui.webcontrols.gridview.rowcommand.aspx
Ele demonstra como usar o rowCommand do grid view:
Em resumo, você deverá fazer as seguintes etapas:
1 - Habilitar o evento RowCommand do Grid View
2 - Dar um commandName para o ButtonField
<asp:gridview id="ContactsGridView" datasourceid="ContactsSource" allowpaging="true" autogeneratecolumns="false" onrowcommand="ContactsGridView_RowCommand" runat="server"> <columns> <asp:buttonfield buttontype="Link" commandname="Add" text="Add"/> <asp:boundfield datafield="ContactID" headertext="Contact ID"/> <asp:boundfield datafield="FirstName" headertext="First Name"/> <asp:boundfield datafield="LastName" headertext="Last Name"/> </columns> </asp:gridview>
3 - Tratar o evento no seu codeBehind
void ContactsGridView_RowCommand(Object sender, GridViewCommandEventArgs e) { if(e.CommandName=="Add") { //Incluir seu código aqui } }
OK?
Francisco Gonçalves
Blog: franciscogoncalves.wordpress.com- Sugerido como Resposta Francisco Gonçalves quinta-feira, 17 de maio de 2012 11:43
- Não Sugerido como Resposta Francisco Gonçalves quinta-feira, 17 de maio de 2012 20:07
-
-
-
Sim esta, tenho 2 TextBox e um botão para cada linha da gridview
Preciso disparar algum tipo de evento após eu digitar algo em dos textbox, executando esse evento eu preencho as colunas da gridview que estão faltando valor.
Já tentei colocar o evento TextChanged no TextBox, o problema que encontrei foi que após executar o TextChanged ele executa o RowCommand do Botão, que não deveria.
Alguma sugestão?
-
Penso se essa é a melhor forma, não seria legal se você fizesse um GridView com um CRUD (Create, Retrieve, Update e Delete) usando jQuery? Ficaria dinâmico e prático.
Acabei de responder um tópico com isso:
http://social.msdn.microsoft.com/Forums/pt-BR/504/thread/ea8ae351-a4e1-4ab4-b721-2a6a3f9e32e2
Desse jeito que fez ao disparar o RowCommand desta forma você não teria o CommandName.
Não poderia testar dentro do Evento RowCommand se algum TextBox está preenchido para ai sim fazer o que precisas?
Continue postando...
É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"
Eduardo Pires
www.eduardopires.net.br
- Editado EduardoPiresMVP quinta-feira, 17 de maio de 2012 19:13
-
Boa tarde Eduardo
Essa grid é só para montar os preços dos produtos, um simulador
Após eu digitar um valor no TextBox eu tenho que fazer os cálculos na camada de controller e atualizar a linha da Grid
O cálculo teria que acontecer após o usuário digitar o valor no TextBox
-
Olá,
Eu fiz uma prova de conceito. Ai você adapta a ideia chamando sua camada controller para executar o cálculo:
Adicione os TextBoxes no GridView:
<asp:TemplateField> <ItemTemplate> <asp:TextBox ID="txt" runat="server" AutoPostBack="true" OnTextChanged="CalculaTudo"></asp:TextBox> </ItemTemplate> </asp:TemplateField>
Função que calcula e atualiza as colunas:
protected void CalculaTudo(object sender, EventArgs e) { TextBox tb = (TextBox)sender; GridViewRow gvr = (GridViewRow)tb.Parent.Parent; int rowindex = gvr.RowIndex; ContactsGridView.Rows[rowindex].Cells[2].Text = (Convert.ToInt32(ContactsGridView.Rows[rowindex].Cells[2].Text) * Convert.ToInt32(tb.Text)).ToString(); }
Note que ele descobre através do TextBox, qual a linha que foi sensibilizada, e vai até uma célula específica (no caso 2) e altera o valor do texto calculando com base no valor digitado na TextBox.
O conceito é esse e está funcionando aqui. Adaptando para seu lado ai deverá funcionar tbm :)
Aguardo seu comentário!
É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"
Eduardo Pires
www.eduardopires.net.br
-
Eu achei um exemplo parecido com esse também, o problema é que quando eu tenho um button em uma das colunas, no meu caso na última columa, após executar o OntextChanged o sistema executa o evento rowcommand do gridview e nesse evento eu tenho o método de excluir que está relacionado ao commandName do botão da minha última coluna, ai ta o problema
-
Amigo,
Muito estranho. Aqui eu montei exatamente como você descreveu, com um Button (na última coluna) e ao disparar o evento TextChanged não disparou o RowCommand.
Você está disparando o RowCommand por necessidade ou ele está sendo disparado contra sua vontade?
Posta seu código ai!
É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"
Eduardo Pires
www.eduardopires.net.br
- Editado EduardoPiresMVP quinta-feira, 17 de maio de 2012 20:57
-
O RowCommand esta disparando contra minha vontade, segue o código:
<asp:GridView ID="gvServico" DataKeyNames="GrupoId" Width="99.5%" runat="server" ShowHeader="false" AutoGenerateColumns="false" OnRowCommand="gvServicoProdutos_RowCommand"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:TextBox ID="txtMargem" OnTextChanged="txtMargem_TextChanged" runat="server" Width="95%" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <ItemTemplate> <asp:TextBox ID="txtPrecoVenda" runat="server" MaxLength="17" CssClass="moeda" Width="95%" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <ItemTemplate> <asp:ImageButton ID="imgExcluir" runat="server" CommandName="Excluir" CommandArgument='<%# Eval("GrupoId") %>' ImageAlign="Middle" ImageUrl="~/Imagens/Site/0.gif" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
protected void txtMargem_TextChanged(object sender, EventArgs e) { TextBox tb1 = ((TextBox)(sender)); GridViewRow gv1 = ((GridViewRow)(tb1.NamingContainer)); int rownumber = gv1.RowIndex; } protected void gvServicoProdutos_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Excluir") { string servicoId = e.CommandArgument.ToString(); //... } }
-
Resolvi meio que na gambiarra, camuflei um ImageButton na última coluna, assim após eu executar TextChanged e o evento rowcommand for disparado o ImageButton que camuflei com um commandName será executado.
-
Amigo,
Para que sirva aos demais, sugiro que poste sua solução ou escolha uma resposta entre as Threads. Muita gente deve passar por isso.
Abçs!
É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"
Eduardo Pires
www.eduardopires.net.br
-
PS -
Marque a propriedade AutoPostBack="true" nos TextBox como no exemplo que lhe enviei. Talvez funcione!
É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"
Eduardo Pires
www.eduardopires.net.br
-
<asp:GridView ID="gvServico" DataKeyNames="GrupoId" Width="99.5%" runat="server" ShowHeader="false" AutoGenerateColumns="false" OnRowCommand="gvServicoProdutos_RowCommand"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:TextBox ID="txtMargem" OnTextChanged="txtMargem_TextChanged" runat="server" Width="95%" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <ItemTemplate> <asp:TextBox ID="txtPrecoVenda" runat="server" MaxLength="17" CssClass="moeda" Width="95%" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <ItemTemplate> <asp:ImageButton ID="imgQuebraExecucao" Width="0" Height="0" runat="server" CommandName="QuebraExecucao" /> <asp:ImageButton ID="imgExcluir" runat="server" CommandName="Excluir" CommandArgument='<%# Eval("GrupoId") %>' ImageAlign="Middle" ImageUrl="~/Imagens/Site/0.gif" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
protected void txtMargem_TextChanged(object sender, EventArgs e) { TextBox tb1 = ((TextBox)(sender)); GridViewRow gv1 = ((GridViewRow)(tb1.NamingContainer)); int rownumber = gv1.RowIndex; } protected void gvServicoProdutos_RowCommand(object sender, GridViewCommandEventArgs e) {
//Após executar o TexChanged o CommandName -> QuebraExecucao sera acionado
if (e.CommandName == "Excluir") { string servicoId = e.CommandArgument.ToString(); //... } }
- Marcado como Resposta Pedro Ogm sexta-feira, 18 de maio de 2012 14:14