Usuário com melhor resposta
Somar valores de uma coluna DataGridView para TextBox

Pergunta
-
Bom Dia,
Estou com dúvidas de como fazer para somar os valores de uma coluna do DataGridView. Tem uma coluna com nome "VALOR" e tenho um textbox que vai receber o Valor Total. Então precisar somar o valor da coluna e passar para esse textbox.
Respostas
-
Lucio, altere o índice para o nome da coluna, e veja se funciona.
dataListaDetalhes.Rows.Cast<DataGridViewRow>().Sum(i => Convert.ToDecimal(i.Cells["VALOR"].Value)).ToString("N2")
att.
Felipe
- Editado Felipe Duarte (FD) quinta-feira, 3 de agosto de 2017 17:31 objeto errado
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 7 de agosto de 2017 12:52
Todas as Respostas
-
Olá!
Segue um exemplo (insira o código logo após carregar o datagridview):
txtValorTotal.Text = dataGridView1.Rows.Cast<DataGridViewRow>().Sum(i => Convert.ToDecimal(i.Cells[colunaValor.Name].Value ?? 0)).ToString("##.00");
Só precisa adicionar a using System.Linq.
Bom trabalho!
- Sugerido como Resposta Felipe Duarte (FD) terça-feira, 1 de agosto de 2017 16:36
-
Nâo entendi essa parte
this.txtValorTotal.Text = dataListaDetalhes.Rows.Cast<DataGridViewRow>().Sum(i => Convert.ToDecimal(i.Cells[colunaValor.Name].Value ?? 0)).ToString("##.00");
No
Cells[colunaValor.Name].Value
"ColunaValor" é para eu colocar o nome da Coluna?
Ela esta sendo Criada assim:
private void CriarTabela() { this.dtDetalhe = new DataTable("Detalhe"); this.dtDetalhe.Columns.Add("ID", System.Type.GetType("System.Int32")); this.dtDetalhe.Columns.Add("NOME DOCUMENTO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("ID FOR", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("FORNECEDOR", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("NUMERO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("DATA EMISSAO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("DATA VENCIMENTO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("VALOR", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("ID DOC", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("TIPO DOCUMENTO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("OBSERVACAO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("EXTENSAO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("BYTES", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("USUARIO", System.Type.GetType("System.String")); this.dataListaDetalhes.DataSource = this.dtDetalhe; }
E os dados estão sendo passados para ela dessa forma:
public void DadosDocumento() { string nomdoc, fornecedor, numero, datae, datav, iddoc, documento, obs, valor; string idfor; string usuario; usuario = Convert.ToString(IdFuncionario); frmDocumento frm = frmDocumento.GetInstancia(); { nomdoc = frm.txtNome.Text; idfor = frm.txtIdFornecedor.Text; fornecedor = frm.txtFornecedor.Text; numero = frm.txtNumero.Text; datae = frm.dtDataEmissao.Text; datav = frm.dtDataVencimento.Text; iddoc = frm.txtIdTipo.Text; valor = frm.txtValorDoc.Text; documento = frm.txtTipoDocumento.Text; obs = frm.txtObservacao.Text; } // this.CriarTabela(); DataRow row = this.dtDetalhe.NewRow(); int count = this.dtDetalhe.Rows.Count; row["ID"] = Convert.ToString(count); row["NOME DOCUMENTO"] = nomdoc; row["ID FOR"] = idfor; row["FORNECEDOR"] = fornecedor; row["NUMERO"] = numero; row["DATA EMISSAO"] = datae; row["DATA VENCIMENTO"] = datav; row["VALOR"] = "R$" + valor; row["ID DOC"] = iddoc; row["TIPO DOCUMENTO"] = documento; row["OBSERVACAO"] = obs; row["USUARIO"] = Convert.ToString(IdFuncionario); this.dtDetalhe.Rows.Add(row); this.AttCampos(); }
-
Nâo entendi essa parte
this.txtValorTotal.Text = dataListaDetalhes.Rows.Cast<DataGridViewRow>().Sum(i => Convert.ToDecimal(i.Cells[colunaValor.Name].Value ?? 0)).ToString("##.00");
No
Cells[colunaValor.Name].Value
"ColunaValor" é para eu colocar o nome da Coluna?
Ela esta sendo Criada assim:
private void CriarTabela() { this.dtDetalhe = new DataTable("Detalhe"); this.dtDetalhe.Columns.Add("ID", System.Type.GetType("System.Int32")); this.dtDetalhe.Columns.Add("NOME DOCUMENTO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("ID FOR", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("FORNECEDOR", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("NUMERO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("DATA EMISSAO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("DATA VENCIMENTO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("VALOR", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("ID DOC", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("TIPO DOCUMENTO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("OBSERVACAO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("EXTENSAO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("BYTES", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("USUARIO", System.Type.GetType("System.String")); this.dataListaDetalhes.DataSource = this.dtDetalhe; }
E os dados estão sendo passados para ela dessa forma:
public void DadosDocumento() { string nomdoc, fornecedor, numero, datae, datav, iddoc, documento, obs, valor; string idfor; string usuario; usuario = Convert.ToString(IdFuncionario); frmDocumento frm = frmDocumento.GetInstancia(); { nomdoc = frm.txtNome.Text; idfor = frm.txtIdFornecedor.Text; fornecedor = frm.txtFornecedor.Text; numero = frm.txtNumero.Text; datae = frm.dtDataEmissao.Text; datav = frm.dtDataVencimento.Text; iddoc = frm.txtIdTipo.Text; valor = frm.txtValorDoc.Text; documento = frm.txtTipoDocumento.Text; obs = frm.txtObservacao.Text; } // this.CriarTabela(); DataRow row = this.dtDetalhe.NewRow(); int count = this.dtDetalhe.Rows.Count; row["ID"] = Convert.ToString(count); row["NOME DOCUMENTO"] = nomdoc; row["ID FOR"] = idfor; row["FORNECEDOR"] = fornecedor; row["NUMERO"] = numero; row["DATA EMISSAO"] = datae; row["DATA VENCIMENTO"] = datav; row["VALOR"] = "R$" + valor; row["ID DOC"] = iddoc; row["TIPO DOCUMENTO"] = documento; row["OBSERVACAO"] = obs; row["USUARIO"] = Convert.ToString(IdFuncionario); this.dtDetalhe.Rows.Add(row); this.AttCampos(); }
Olá!
Cell[colunaValor.Name].Value, se refere à coluna onde está sendo armazenado o valor, onde "colunaValor" seria o nome da coluna. Conforme seu código, poderia ser Cell[Valor.Name].Value, ou ainda Cell[7].Value (utilizando o índice da coluna, que começa em zero).
-
Olha o Erro que deu
- Editado Lucio Henrique quinta-feira, 3 de agosto de 2017 13:37 Alteração Imagem
-
-
Caros, boa tarde!
Rodrigo CdS, mesmo ele colocando o nome da coluna "VALOR", vai continuar dando erro de conversão.
Porque ele está preenchendo a coluna "VALOR" com R$ + valor.
Lucio Henrique, faça o seguinte no seu código, no seu método CriarTabela, altere o tipo da coluna "VALOR" para decimal:
this.dtDetalhe.Columns.Add("VALOR", typeof(decimal));
No método DadosDocumento, faça essa alteração também:
row["VALOR"] = valor;
Com essas alterações, o código que o Rodrigo CdS te passou, vai funcionar perfeitamente.
Qualquer dúvida, estou a disposição.
att.
Felipe
-
O DataGridView do form debaixo da print é preenchido com esse form menor aberto, onde o campo valor do datagridview é preenchido com o valor do textbox "Valor Documento", quando cliquei em salvar voltou o erro:
//ALTEREI O CAMPO VALOR QUE VOCE DISSE
row["DATA VENCIMENTO"] = datav; row["VALOR"] = valor; row["ID DOC"] = iddoc;
//AQUI TAMBÉM ALTERADO COMO VOCÊ PASSOU this.dtDetalhe.Columns.Add("DATA VENCIMENTO", System.Type.GetType("System.String")); this.dtDetalhe.Columns.Add("VALOR", typeof(decimal)); this.dtDetalhe.Columns.Add("ID DOC", System.Type.GetType("System.String"));
- Editado Lucio Henrique quinta-feira, 3 de agosto de 2017 17:26 Acrescentando codigo
-
Lucio, altere o índice para o nome da coluna, e veja se funciona.
dataListaDetalhes.Rows.Cast<DataGridViewRow>().Sum(i => Convert.ToDecimal(i.Cells["VALOR"].Value)).ToString("N2")
att.
Felipe
- Editado Felipe Duarte (FD) quinta-feira, 3 de agosto de 2017 17:31 objeto errado
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 7 de agosto de 2017 12:52
-
Bom dia,
Por falta de retorno essa thread está sendo encerrada.
Se necessário, favor abrir uma nova thread.
Atenciosamente,Filipe B de Castro
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
-