none
Somar valores de uma coluna DataGridView para TextBox RRS feed

  • 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.

    terça-feira, 1 de agosto de 2017 14:29

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


    quinta-feira, 3 de agosto de 2017 17:31

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!

    terça-feira, 1 de agosto de 2017 16:30
  • 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();
            }

    quinta-feira, 3 de agosto de 2017 12: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();
            }

    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).

    quinta-feira, 3 de agosto de 2017 13:04
  • Olha o Erro que deu

    • Editado Lucio Henrique quinta-feira, 3 de agosto de 2017 13:37 Alteração Imagem
    quinta-feira, 3 de agosto de 2017 13:36
  • Tente substituir o índice 7 por 8 (Cell[8].Value). Vi na imagem do seu grid que há uma coluna a mais, chamada visualizar. Isto empurra as outras colunas um índice á frente. Ou acesse pelo nome mesmo: Cell["VALOR"].Value.
    quinta-feira, 3 de agosto de 2017 15:39
  • 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

    quinta-feira, 3 de agosto de 2017 16:46
  • 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
    quinta-feira, 3 de agosto de 2017 17:24
  • 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


    quinta-feira, 3 de agosto de 2017 17:31
  • 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.

    segunda-feira, 7 de agosto de 2017 12:52
    Moderador
  • Funcionou felipedrt,

    Muito Obrigado!!

    segunda-feira, 7 de agosto de 2017 14:43