Somar Valores de uma coluna do GridView

.NET

16/02/2015

Em windowsForm, o gridview tem a coluna "Valor" que preciso somar e mostrar em um textbox o total.
O gridview é da tabela "ItensLocação" e a coluna "Valor", é um combobox que traz o valor da tabela "Livros", pela junção do ID...

Tenho o código abaixo que funciona, mas o problema é que está somando o ID e não o valor mostrado na linha da coluna "Valor"...

private decimal valorLoc()
        {
            decimal total = 0;
            int i = 0;

            for (i = 0; i < itemLocacaoDataGridView.Rows.Count; i++)
            {
                total = total + Convert.ToDecimal(itemLocacaoDataGridView.Rows[i].Cells[2].Value);
            }
            return total;
        }

        private void calculaValor()
        {
            if (itemLocacaoDataGridView.Rows.Count > 0)

                valorLocacaoTextBox.Text = valorLoc().ToString("N");
        }


Aqui está a configuração do combobox :
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150216-181254.png[/img]

E aqui o grid, para melhor entendimento :
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150216-181322.png[/img]

Se alguém puder ajudar, agradeço Muito!
Jair Souza

Jair Souza

Curtidas 0

Melhor post

Joel Rodrigues

Joel Rodrigues

23/02/2015

Ué, se a coluna é de valor, por que ela está ligada no campo ID? O erro aí é esse.
GOSTEI 1

Mais Respostas

Joel Rodrigues

Joel Rodrigues

16/02/2015

Tente referenciar a coluna pelo nome ao invés de pelo índice.
GOSTEI 0
Jair Souza

Jair Souza

16/02/2015

Foi a minha primeira tentativa, mas dá este erro :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150221-203720.png[/img]

"Coluna não pode ser encontrado"
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/02/2015

Que viagem, cara. Só agora vi na imagem que a coluna Valor na verdade está ligada ao campo IDLivro, por isso está somando o ID.
GOSTEI 0
Jair Souza

Jair Souza

16/02/2015

Pois é...será que tem jeito ??
GOSTEI 0
Jair Souza

Jair Souza

16/02/2015

Desculpe a falta de conhecimento.
Este grid é da tabela "ItemLocacao" e o preço está na tabela "Livro", o que fiz foi transformar o textbox em combobox para trazer o preço...
Errei na lógica, no raciocínio ?
Não pode ser assim ?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/02/2015

Ao invés de fazer dessa forma, faça o select direto usando join e exiba direto na coluna o valor, assim o Value será o valor desejado.
GOSTEI 1
Jair Souza

Jair Souza

16/02/2015

Funcionou e ficou assim no query builder:

SELECT ItemLocacao.IDItem, ItemLocacao.IDLocacao, ItemLocacao.IDLivro, ItemLocacao.IDLocatario, ItemLocacao.IDFuncionario, ItemLocacao.[Data de Devolucao],
ItemLocacao.Obs1, ItemLocacao.Obs2, ItemLocacao.Obs3, Livro.[Valor Locacao]

FROM ((ItemLocacao INNER JOIN Locacao ON Locacao.IDLocacao = ItemLocacao.IDLocacao) INNER JOIN Livro ON Livro.IDLivro = ItemLocacao.IDLivro)

WHERE (Locacao.IDLocacao = ?)

No código chamo assim :

this.itemLocacaoTableAdapter.FillByIDLocacao(this.bDBibliotecaDataSet.ItemLocacao, Convert.ToInt32(iDLocacaoTextBox.Text));


E assim faz o cálculo :

private decimal valorLoc()
        {
            decimal total = 0;
            int i = 0;

            for (i = 0; i < itemLocacaoDataGridView.Rows.Count; i++)
            {
                total = total + Convert.ToDecimal(itemLocacaoDataGridView.Rows[i].Cells[2].Value);
            }
            return total;
        }

        private void calculaValor()
        {
            if (itemLocacaoDataGridView.Rows.Count > 0)

                valorLocacaoTextBox.Text = valorLoc().ToString("N");
        }


E chamo o método "calculaValor();" conforme a regra de negócio do projeto, neste caso na hora da inclusão do livro.

Este é o resultado em designer :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150308-105140.png[/img]

Valeu Joel, e muito !
GOSTEI 0
POSTAR