none
Problema com TextBox dentro de uma GridView RRS feed

  • Pergunta

  • Olá,

    Possuo um carrinho de compras e nele tem um campo Quantidade. Este campo é um textbox(dentro de um TemplateField) no qual o usuário digita a quantidade que ele quiser.

    O meu problema é que, quando o usuário digita a quantidade desejada, eu não consigo gravar esta quantidade automaticamente, ou seja, sem precisar apertar botão.

    Tentei usar RowUpdating, RowUpdated e nada.

    Alguém pode me ajudar?

    quarta-feira, 4 de setembro de 2013 15:23

Respostas

  • Agora que eu entendi o que se ta fazendo!

    Bom eu fiz aqui o exemplo e funcionou sim tudo certinho, mas, ai tem um agravante como você vai resgatar a Id do elemento que vai ser alterado pela nova quantidade? fica ai a pergunta, visto que o TextBox não tem um propriedade especifica para fazer isso, ou seja, guarda o Id Referente a alteração

    Código Executado por mim:

    Aspx:

    <asp:GridView ID="GridViewDados" runat="server" AutoGenerateColumns="False">
    	<Columns>
    		<asp:BoundField DataField="Id" HeaderText="Id" />
    		<asp:BoundField DataField="Descricao" HeaderText="Descricao" >
    		<ItemStyle Width="300px" />
    		</asp:BoundField>
    		<asp:TemplateField HeaderText="Quantidade">                    
    			<ItemTemplate>
    				<asp:HiddenField ID="TxtId" runat="server" Value='<%#Eval("Id") %>' />
    				<asp:TextBox AutoPostBack="true" OnTextChanged="TxtQuantidade_TextChanged"  Text='<%#Eval("Quantidade") %>' ID="TxtQuantidade" runat="server"></asp:TextBox>
    				
    			</ItemTemplate>
    		</asp:TemplateField>
    	</Columns>
    </asp:GridView>

    Código:

    protected void TxtQuantidade_TextChanged(object sender, EventArgs e)
    {
    	TextBox _TxtQuantidade = (TextBox)sender;
    	if (_TxtQuantidade != null)
    	{
    
    	}
    }

    Nesse código ele recupera todo o conjunto de informações do elemento alterado na tela!

    Nesse link tem um exemplo de um carrinho de compra feito por mim: quem sabe te ajude a melhorar mas, se eu fosse você colocaria um botão de confirmação e nesse exemplo tem o individual e o total!

    http://fulviocanducci.wordpress.com/2013/06/22/classes-para-carrinho-de-compra/


    Fúlvio Cezar Canducci Dias


    quarta-feira, 4 de setembro de 2013 16:14

Todas as Respostas

  • Utilize o:

    AutoPostBack="true"

    que quando perder o foco ele será executado!

    Fúlvio Cezar Canducci Dias

    quarta-feira, 4 de setembro de 2013 15:31
  • Ja tentei por AutoPostback = True e mesmo assim nao acontece nada

    quarta-feira, 4 de setembro de 2013 15:38
  • Se fez alguma codificação no evento desse Post?

    Fúlvio Cezar Canducci Dias

    quarta-feira, 4 de setembro de 2013 15:40
  •  Protected Sub txtQuantidade_TextChanged(sender As Object, e As System.EventArgs)
            Dim intQtde As Integer
            intQtde = DirectCast(grdProdutos.Rows(1).Cells(3).FindControl("lblQuantidade"), TextBox).Text

        End Sub   

    quarta-feira, 4 de setembro de 2013 15:48
  • Coloquei um breakpoint nesta função,  e em momento algum entra nela
    quarta-feira, 4 de setembro de 2013 15:48
  • Agora que eu entendi o que se ta fazendo!

    Bom eu fiz aqui o exemplo e funcionou sim tudo certinho, mas, ai tem um agravante como você vai resgatar a Id do elemento que vai ser alterado pela nova quantidade? fica ai a pergunta, visto que o TextBox não tem um propriedade especifica para fazer isso, ou seja, guarda o Id Referente a alteração

    Código Executado por mim:

    Aspx:

    <asp:GridView ID="GridViewDados" runat="server" AutoGenerateColumns="False">
    	<Columns>
    		<asp:BoundField DataField="Id" HeaderText="Id" />
    		<asp:BoundField DataField="Descricao" HeaderText="Descricao" >
    		<ItemStyle Width="300px" />
    		</asp:BoundField>
    		<asp:TemplateField HeaderText="Quantidade">                    
    			<ItemTemplate>
    				<asp:HiddenField ID="TxtId" runat="server" Value='<%#Eval("Id") %>' />
    				<asp:TextBox AutoPostBack="true" OnTextChanged="TxtQuantidade_TextChanged"  Text='<%#Eval("Quantidade") %>' ID="TxtQuantidade" runat="server"></asp:TextBox>
    				
    			</ItemTemplate>
    		</asp:TemplateField>
    	</Columns>
    </asp:GridView>

    Código:

    protected void TxtQuantidade_TextChanged(object sender, EventArgs e)
    {
    	TextBox _TxtQuantidade = (TextBox)sender;
    	if (_TxtQuantidade != null)
    	{
    
    	}
    }

    Nesse código ele recupera todo o conjunto de informações do elemento alterado na tela!

    Nesse link tem um exemplo de um carrinho de compra feito por mim: quem sabe te ajude a melhorar mas, se eu fosse você colocaria um botão de confirmação e nesse exemplo tem o individual e o total!

    http://fulviocanducci.wordpress.com/2013/06/22/classes-para-carrinho-de-compra/


    Fúlvio Cezar Canducci Dias


    quarta-feira, 4 de setembro de 2013 16:14