Ir para conteúdo

POWERED BY:

Arquivado

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

bartulic

[Resolvido] textbox em GridView

Recommended Posts

Boa tarde!

Meu enorme problema....

 

No evento de um DropDownList, monto um datatable, e então preencho o meu GRIDVIEW.....

O mesmo não possui opções para edição, deleção nem nada, apenas é carregado, contém duas colunas que tem TEXTBOX....

Segue imagem:

 

Imagem Postada

 

Bom, como é possível perceber, existe um Label e um Textbox após o Grid, onde possuo Javascript que conforme digitado valor na coluna Part Produto, ele atualiza o TextBox do final, bem como a participação da empresa, ao alterar, tbm preenche a linha Total Empresas correspondente ao produto........... ou seja, posso fazer todas as coisas no Grid mesmo, após acertar todos os meus valores, devo incluir o Lançamento, e é aí que está o meu problema.....

 

No evento do Botão Incluir Lançamento, eu tento pegar o valor de uma das colunas onde atualizei os dados, encontro o objeto textbox da seguinte forma:

((TextBox)gvProdutos.Rows[0].Cells[6].Controls[1]).Text

Nesse caso eu estou buscando o valor da coluna part empresa (a ultima que tem o textbox, é claro) ....e o valor que ele me traz é o 0,00 ...que é o valor qdo eu carrego o grid pela primeira vez, é como se o valor digitado não fosse atualizado no TEXTBOX....

 

Já tirei ajax, e nada resolve, a questão é que tenho outras páginas que usam textbox e funcionam, porém é a primeira que faço onde o evento para atualização do dado do gridview nao ocorre pelo evento updating do próprio GridView e sim pelo evento de um botão no fim da página...

 

PS.: O DATATABLE NÃO UTILIZO MAIS, SÓ SE A PESSOA ALTERAR O DROPDOWN, ONDE EU DEVO TRAZER OS VALORES REFERENTES AQUELE ITEM SELECIONADO E OS TEXTBOX TODOS VEM ZERADOS.....ou seja, a única mudança sempre será na penúltima coluna (CASO CARREGADO COM O DATATABLE), aquela com labels que sempre virá preenchida....

 

Alguém tem alguma dica? Já teve o mesmo problema e pode me ajudar

 

Eu agredeço mto

 

Debora

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, esses valores são setados no javascript.............mas no .cs qdo busco o valor do textbox, traz como em branco, o estado anterior a digitação dos dados via textbox...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que assim.

Se você seta os valores no grid no load, assim q você clica no botão ela passa pelo load mais uma vez e zera o que foi setado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

function calculatotal(e)
		{
		    var name = e.name;
		    var valor = e.value;
		    var total = document.forms[0].ctl00$ContentPlaceHolderMenu$TabAbasLanctos$Panel1$hdtotal.value;
		    var log = document.forms[0].ctl00$ContentPlaceHolderMenu$hdtotaleStr.value;
		    var arrlog = new Array();
		    arrlog = log.split(";")
		    var aux = 0;
		    var flag = false;
		    var flagAlt = false;
		    document.forms[0].ctl00$ContentPlaceHolderMenu$hdtotaleStr.value = "";
		    if(log!="")
		    {
		        for(var l in arrlog)
		        {
		            flag = true;
		            var a = new Array();
		            a = arrlog[l].split("|");
		            if(name==a[0])
		            {
		                flagAlt = true;
		                aux  = a[1]; 
		                a[1] = valor;
		                total =  eval(total) - eval(CurrencyFormatted(aux));
		            }
		            document.forms[0].ctl00$ContentPlaceHolderMenu$hdtotaleStr.value += a[0] + "|" + a[1] + ";";
		        }
		        if(!flagAlt)document.forms[0].ctl00$ContentPlaceHolderMenu$hdtotaleStr.value += name + "|" + valor + ";";    
		    }
		    if(!flag)document.forms[0].ctl00$ContentPlaceHolderMenu$hdtotaleStr.value = name + "|" + valor + ";";
		    total = eval(total) + eval(CurrencyFormatted(valor));
		    document.forms[0].ctl00$ContentPlaceHolderMenu$TabAbasLanctos$Panel1$hdtotal.value = CurrencyFormatted(total);
		}

Esse acima é o meu javascript, responsável apenas para receber o dado digitado na segunda coluna "Part Produto", faz a soma ou subtração e atualiza o meu hidden na ultima linha da imagem, não faz parte do grid....

 

Em nenhum momento eu dou bind novamente no grid............botei breakpoint no bound pra confirmar isso, e realmente não passa por lá...qdo eu clico no botão incluirlancamento, ele vai direto para o evento click do botão, não passa novamente pelo bound.....

 

<asp:TemplateField HeaderText="Part. Produto">
                                                <ItemTemplate>
                                                    <asp:TextBox id="gvtxtpartProd" onblur="javascript:calculatotal(this);" runat="server" CssClass="combo" Width="79px" Height="15px" MaxLength="10" AutoPostBack="false" ReadOnly="false"/>
                                                </ItemTemplate>
                                                <ItemStyle Font-Bold="False" HorizontalAlign="Right" CssClass="preField" 
                                                    Width="80px" Height="15px"/>
                                            </asp:TemplateField>

Sei que é bem confuso, mas não faz sentido, não tenho evento algum dentro do grid, nem salvar, cancelar, editar, deletar, nada.....apenas tenho o texbox onde permito inserir valores, e depois de inseridos eu adiciono o lançamento, devo fazer a leitura linha a linha do grid, resgatando os valores digitados, e então gravar no BD

 

                    foreach (GridViewRow row in gvProdutos.Rows)
                    {
                        string textBoxText = ((TextBox)row.FindControl("gvtxtpartProd")).Text;
                    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, um datatable que eu criei e monto ele da maneira que tem que ser montado, resultante de um resultset (utilizo Linq), com linhas especificando o total das empresas e etc.......

 

Mas esse datatable só é usado no momento da seleção de um item em um determinado dropdown, qdo selecionado, ele monta o datatable e eu dou o bind no grid usando esse datatable, e então ele não é mais usado em momento algum.....todo o meu problema acredito eu, está ou no javascript, que não está setando o valor digitado no objeto....ou o problema está devido ao evento estar fora do grid (já q é um botão isolado lá no final da página), pois se houvesse o updating no gridview, funcionaria, bem como tenho em outras páginas já do sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao setar um valor em Part Produto seu Js Atualiza o valor do text box do final?

Pq assim, idependente se o botão da dentro ou fora do grid, se você seta um valor dentro de um textbox dentro do grid e no evento de um botão percorre todas linhas do grid, esse texto box tem q ter o valor informado. a não ser que eu antes de percorer o grid ocorra algum bind nos textbox.

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz......eu acho que você mesmo já postou a solução em outro lugar, é mais ou menos isso

http://forum.imasters.com.br/index.php?/topic/380466-pagina-de-apostas-sistema-de-bolao/

 

Só que no caso dele, havia um botão em cada linha pelo que entendi....e no meu caso nao, só possui UM BOTÃO FORA do grid, no fim da página....

 

Só queria que me ajudasse a aplicar, pois eu nao entendi mto bem, pq nao entendi o que fazia a tela do amigo, e queria saber de você, já que você deu a solução se o caso se aplica a minha página...

 

obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Ivan, eu agradeço por toda a ajuda que tentou me dar, mas entendo que era inexplicável....

O problema foi encontrado, e solucionado, e vou compartilhar com você...hehehe

Realmente ele nao fazia "bound" novamente, isso posso afimar, o que acontecia é que a ÚNICA vez que ele entrava no bound, eu montava um ID para aquele textbox, e era esse ID que se perdia, ele buscava zero, pois não sabia qual textbox eu havia digitado...

 

Segue a linha com problema e a que solucionou....


//gvtxtpartprod.ID = "PartProd_" + Convert.ToDouble(idproduto).ToString("000") + "_" + Convert.ToDouble(idempresa).ToString("000");
gvtxtpartprod.Attributes.Add("id","PartProd_" + Convert.ToDouble(idproduto).ToString("000") + "_" + Convert.ToDouble(idempresa).ToString("000"));

A que está "comentada" é aque estava no código e que causava problemas, a de baixo é a que solucionou....

 

Obrigada..... :D

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.