Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lucas K

problema ao pegar conteudo do campo texto usandro template na gridview

Recommended Posts

Boa tarde!

 

não sei porque mas não consigo pegar o conteudo atual de um textbox que esta em um campo template da minha grid view

 

abaixo o conteudo do arquivo carrinho.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Store.master" AutoEventWireup="true" CodeFile="carrinho.aspx.cs" Inherits="carrinho" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentLeft" Runat="Server">
    </asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentCenter" Runat="Server">


    <asp:GridView ID="grdCarrinho" runat="server" 
        onrowdeleting="grdCarrinho_RowDeleting" CellPadding="4" ForeColor="#333333" 
        GridLines="None" Width="452px" CssClass="table" 
        AutoGenerateColumns="False" DataKeyNames="ID">
      <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Image ID="Image1" runat="server" ImageUrl= '<%# "~/Images/thumb65/"+ Eval("urlImagemProduto") %>'/>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Produto">
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Eval("nomeDoProduto") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

            <!-- Este é o campo que não consigo obter o valor atual quando dou o update -->
            <asp:TemplateField HeaderText="Quantidade">
                <ItemTemplate>
                    <asp:TextBox ID="txtQuantidade" runat="server" MaxLength="5" Text='<%# Bind("quantidade") %>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>


            <asp:TemplateField HeaderText="Preço">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Eval("preco","{0:C}") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Total">
                <ItemTemplate>
                    <asp:Label ID="Label3" runat="server" Text='<%# Eval("totalitem","{0:C}") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:CommandField ShowDeleteButton="True" />
        </Columns>
        <EditRowStyle BackColor="#999999" />
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#E9E7E2" />
        <SortedAscendingHeaderStyle BackColor="#506C8C" />
        <SortedDescendingCellStyle BackColor="#FFFDF8" />
        <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
    </asp:GridView>


    Total
    <asp:Label ID="labelTotal" runat="server" Text="Label"></asp:Label>


    <br />
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click1" 
        Text="Atualizar" />


</asp:Content>

 

 

E esta esta é a açao executada em um botao de update que tenho na tela

 

protected void UpdateTotals()
    {
        // update the quantities
        foreach (GridViewRow row in grdCarrinho.Rows)

        {
            // quando pego a quantidade atual no campo, nao vem a quantidade      //que informei e sim a quantidade que já estava no campo quando foi //construida a grid

            int Quantity = Convert.ToInt32((row.FindControl("txtQuantidade") as TextBox).Text);
            if (Quantity == 0)
            {
                Profile.Carrinho.Itens.RemoveAt(row.RowIndex);
            }
            else
            {
                Profile.Carrinho.Itens[row.RowIndex].Quantidade = Quantity;
            }
            grdCarrinho.EditIndex = -1;
            BindGrid();
        }
    }

 

Alguma ideia de porque isso acontece? como posso resolver?

Compartilhar este post


Link para o post
Compartilhar em outros sites

este fórum é apenas para ASP classic...

mas dê um response.wrie na propriedade .Text do grid para ver o que esta sendo passado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

na linha

int Quantity = Convert.ToInt32((row.FindControl("txtQuantidade") as TextBox).Text);

a quantidade que vem é sempre o conteudo original do campo que apareceu no textbox do template da grid abaixo..

 

 <asp:TemplateField HeaderText="Quantidade">
                <ItemTemplate>
                    <asp:TextBox ID="txtQuantidade" runat="server" MaxLength="5" Text='<%# Bind("quantidade") %>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>

 

se eu editar o conteudo atual "1" para "3", na funcao updatetotals aparece "1"

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente trocar o bind por eval, mas lembrando que

 

Se você utilizar o bind ou eval no itemtemplate, não fará nenhuma diferença na funcionalidade.

agora se precisar passar para o método Update da fonte de dados, você precisará usar # Bind.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, legal que resolveu, e se quiser da próxima vez postar direto no fórum de .Net.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.