none
Dúvida pegar o valor da coluna de cada linha no datagridview RRS feed

  • Pergunta

  • Saudações.

    Como faço pra pegar o valor da coluna "produtoid" de cada linha no datagridview?

    Minha intenção é pegar esse valor e jogar em um variavel passando ela pra um metodo que tenha como parametro para poder gravar no banco.

    quinta-feira, 18 de junho de 2015 17:41

Respostas

  •  foreach (var row in this.dataGridView1.Rows)
                {
                    var dataGridViewRow = row as DataGridViewRow;
                    var celula = dataGridViewRow.Cells[7]; // Aqui eu usei o 7 pois é o index da coluna produtoid
                    var valor = celula.Value;
                }
    quinta-feira, 18 de junho de 2015 18:11
  • Você pode fazer de três maneiras.

    1) Você seta a propriedade AllowUserToAddRows do DataGrid para false, isso faz com que a ultima linha seja removida, mas o usuário não pode mais adicionar registros manualmente.

    2) Você pode trocar o foreach por um for que itera apenas até o penúltimo registro.

    for (int i = 0; i < this.dataGridView1.Rows.Count - 1; i++)
                {
                    var dataGridViewRow = this.dataGridView1.Rows[i] as DataGridViewRow;
                    var celula = dataGridViewRow.Cells[7];
                    var valor = celula.Value;
                }

    3) Você pode continuar usando o ForEach, mas vai precisar fazer um teste para ver se é a ultima linha.

    foreach (var row in this.dataGridView1.Rows)
                {
                    var dataGridViewRow = row as DataGridViewRow;
                    var indexDaLinha = this.dataGridView1.Rows.IndexOf(dataGridViewRow);
    
                    if (indexDaLinha == this.dataGridView1.Rows.Count - 1) //Aqui você testa ve se é a a ultima linha, caso seja ele sai do foreach.
                        break; //Esse comando break basicamente encerra o foreach.
    
                    var celula = dataGridViewRow.Cells[7];
                    var valor = celula.Value;
                }


    quinta-feira, 18 de junho de 2015 19:15

Todas as Respostas

  • Olá, tenta usar o código abaixo

     foreach (var row in this.dataGridView1.Rows)
                {
                    var dataGridViewRow = row as DataGridViewRow;
                    var celula = dataGridViewRow.Cells["produtoid"];
                    var valor = celula.Value;
                }

    Você pode também acessar via index, ou seja, em vez de informar o nome da coluna você informa o index, que no seu caso seria o index 7.
    quinta-feira, 18 de junho de 2015 17:52
  • Bruno, teria como enviar um exemplo com index?

    Porque a variavel que vai receber o valor da coluna de cada é do tipo Int64.

    quinta-feira, 18 de junho de 2015 18:09
  •  foreach (var row in this.dataGridView1.Rows)
                {
                    var dataGridViewRow = row as DataGridViewRow;
                    var celula = dataGridViewRow.Cells[7]; // Aqui eu usei o 7 pois é o index da coluna produtoid
                    var valor = celula.Value;
                }
    quinta-feira, 18 de junho de 2015 18:11
  • Bruno, eu consegui.

    Porém, me ocorreu outro problema.

    Perceba que abaixo da linha 1 do datagridview, tem um alinha com asterisco, então, na hora de fazer o foreach coloquei assim:

      foreach (DataGridViewRow row in this.dgvItemVenda.Rows)
                        {
                            if (dgvItemVenda.Rows.Count > 0)
                            {
                                var celula = row.Cells[7].Value;
                                valor = Convert.ToInt64(celula);
                                objItemVenda._objProduto = objProdutoBO.selecionarUM(valor);
                                objItemVenda._objVenda = objVendaBO.selecionarUM(contador);
                                objItemVendaBO.inserir(objItemVenda);   
                            }                        
                        }

    Só que esse foreach tá contado essa linha do asterisco como 0 e por isso ta dando erro. Como faço pra ele não contar essa linha?


    Tentei corrigir com esse if mas não sem sucesso.
    quinta-feira, 18 de junho de 2015 19:05
  • Você pode fazer de três maneiras.

    1) Você seta a propriedade AllowUserToAddRows do DataGrid para false, isso faz com que a ultima linha seja removida, mas o usuário não pode mais adicionar registros manualmente.

    2) Você pode trocar o foreach por um for que itera apenas até o penúltimo registro.

    for (int i = 0; i < this.dataGridView1.Rows.Count - 1; i++)
                {
                    var dataGridViewRow = this.dataGridView1.Rows[i] as DataGridViewRow;
                    var celula = dataGridViewRow.Cells[7];
                    var valor = celula.Value;
                }

    3) Você pode continuar usando o ForEach, mas vai precisar fazer um teste para ver se é a ultima linha.

    foreach (var row in this.dataGridView1.Rows)
                {
                    var dataGridViewRow = row as DataGridViewRow;
                    var indexDaLinha = this.dataGridView1.Rows.IndexOf(dataGridViewRow);
    
                    if (indexDaLinha == this.dataGridView1.Rows.Count - 1) //Aqui você testa ve se é a a ultima linha, caso seja ele sai do foreach.
                        break; //Esse comando break basicamente encerra o foreach.
    
                    var celula = dataGridViewRow.Cells[7];
                    var valor = celula.Value;
                }


    quinta-feira, 18 de junho de 2015 19:15
  • Bruno, a primeira opção pra mim já bastou.

    Obrigado!

    Abraços.

    quinta-feira, 18 de junho de 2015 19:43