none
Disparar RowCommand através do TextBox RRS feed

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

    quinta-feira, 17 de maio de 2012 11:43
  • usar o commandname em um button tudo bem, e sobre um TextBox, o Textbox não tem esse atributo e nem o CommandArgument

    quinta-feira, 17 de maio de 2012 13:13
  • Seu textbox está dentro do GridView?

    O que gostaria de fazer?


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    quinta-feira, 17 de maio de 2012 15:19
  • 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?

    quinta-feira, 17 de maio de 2012 16:30
  • 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

           




    quinta-feira, 17 de maio de 2012 19:11
  • 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

    quinta-feira, 17 de maio de 2012 19:38
  • 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

           

    quinta-feira, 17 de maio de 2012 20:36
  • 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
    quinta-feira, 17 de maio de 2012 20:45
  • 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

           


    quinta-feira, 17 de maio de 2012 20:56
  • 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();
    		//...
    	}	
    }
    sexta-feira, 18 de maio de 2012 11:27
  • 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.
    • Marcado como Resposta Pedro Ogm sexta-feira, 18 de maio de 2012 14:03
    • Não Marcado como Resposta Pedro Ogm sexta-feira, 18 de maio de 2012 14:14
    sexta-feira, 18 de maio de 2012 13:04
  • 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

           

    sexta-feira, 18 de maio de 2012 14:03
  • 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

           

    sexta-feira, 18 de maio de 2012 14:05
  • <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
    sexta-feira, 18 de maio de 2012 14:14