none
Duvida com foreach + datagridview RRS feed

  • Pergunta

  • Pessoal, estou usando o código abaixo para verificar se todas as células do grid estão preenchidas.

    Até ai funciona numa boa, acontece que a célula "12" não é obrigatória, mas com o código ele está verificando todas as células e no caso se a "12" não estiver preenchida ele não executa meu método.

    Como poderia fazer para verificar todas as células, removendo a analise da célula "12"?

     foreach (DataGridViewRow linha in this.dataGridView1.Rows)
                {
                   foreach (DataGridViewCell cell in linha.Cells)
                    {
                        if (cell.Value == null || cell.Value.Equals("") && cell.RowIndex != 12)
                        {
                            MessageBox.Show("Verifique se todos os campos necessários para a operação foram preenchidos corretamente.", "Varrendo linhas", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            break;
                        }
                        else
                        {
                            monta();
                            break;
                        }
    
                    }
                }


    sexta-feira, 10 de julho de 2015 16:06

Respostas

  • Fala Daniel, beleza?

    Quero executar o método somente se estiver com tudo preenchido.

    Olha tive uma trabalheira danada, fiz teste de celula a celula com o código abaixo e agora ele funcionou perfeitamente.

    Irei fazer alterar o código para a forma correta.

    Sofri bastante com este impasse...mas aprendi muita coisa.

    O erro estava na celula 9, que estava recebendo o valor "" quando uma celula antes dela era preenchida errada.

    Alterei a forma como o valor da celula 9 tinha que ser preenchida caso a celula anterior fosse preenchida errada de "" para null e o problema sumiu.

    Agradeço pela sua ajuda e pela ajuda do Bruno, um abração pra vocês.

    foreach (DataGridViewRow linha in this.dataGridView1.Rows)
                {
    
                        if (linha.Cells[0].Value != null)
                        {
                            if (linha.Cells[1].Value != null)
                            {
                                if (linha.Cells[2].Value != null)
                                {
                                    if (linha.Cells[3].Value != null)
                                    {
                                        if (linha.Cells[4].Value != null)
                                        {
                                            if (linha.Cells[5].Value != null)
                                            {
                                                if (linha.Cells[6].Value != null)
                                                {
                                                    if (linha.Cells[7].Value != null)
                                                    {
                                                        if (linha.Cells[9].Value != null)
                                                        {
                                                            if (linha.Cells[11].Value != null)
                                                            {
    
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("Alguma linha está com o campo TIPO vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            MessageBox.Show("Alguma linha está com o campo KM.MONTAGEM vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        MessageBox.Show("Alguma linha está com o campo LADO vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                    }
                                                }
                                                else
                                                {
                                                    MessageBox.Show("Alguma linha está com o campo EIXO vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                }
                                            }
                                            else
                                            {
                                                MessageBox.Show("Alguma linha está com o campo ALT.MM vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                            }
                                        }
                                        else
                                        {
                                            MessageBox.Show("Alguma linha está com o campo DOT vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        }
                                    }
                                    else
                                    {
                                        MessageBox.Show("Alguma linha está com o campo PNEU vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("Alguma linha está com o campo PLACA vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                            }
                            else
                            {
                                MessageBox.Show("Alguma linha está com o campo SERIE vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Alguma linha está com o campo ITEM vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    
                    
                }


    • Marcado como Resposta Renato Cristiano quinta-feira, 16 de julho de 2015 15:40
    quarta-feira, 15 de julho de 2015 14:36

Todas as Respostas

  • Olá Renato, pelo que eu entendi você quer que quando seja a linha 12 ele não faça nada, se for isso, uma pequena alteração no código deve resolver teu problema.

    foreach (DataGridViewRow linha in this.dataGridView1.Rows)
                {
                    if (linha.Index == 12) // o index 12 significa que a linha será a 13, pois o index inicia pelo 0 e não pelo 1, se não funcionar
                                            //só troque o 12 por 11;
                        continue;
    
                    foreach (DataGridViewCell cell in linha.Cells)
                    {
                        if (cell.Value == null || cell.Value.Equals(""))
                        {
                            MessageBox.Show("Verifique se todos os campos necessários para a operação foram preenchidos corretamente.", "Varrendo linhas", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            break;
                        }
                        else
                        {
                            monta();
                            break;
                        }
    
                    }
                }

    sexta-feira, 10 de julho de 2015 16:39
  • Amigão, primeiramente fico grato pelo apoio.

    vou tentar ser mais claro, na verdade não é a linha de index 12 que eu não quero validar e sim a celula 12 de qualquer linha.

    Por que todos os campos da linha são obrigatórios menos o campo 12.

    nesse caso o código está me obrigando a preencher o campo 12 de todas as linhas para executar meu método e na verdade o campo 12 por não ser obrigatório pode estar vazio ou não.

    sexta-feira, 10 de julho de 2015 18:08
  • Então você só precisa organizar o teu if.

    if ((cell.Value == null || cell.Value.Equals("")) && cell.RowIndex != 12)

    No seu código ele entrava no if sem analisar se o RowIndex era diferente de 12, agora ele vai entrar somente no if se o valor da celula for null ou vazio E o index da celula for diferente de 12.

    OBS: Como o index começa em 0, provavelmente você quer analizar o index 11, que seria equivalente a coluna 12.

    sexta-feira, 10 de julho de 2015 18:20
  • Bruno, ainda não deu.

    eu entendi o que você tentou ajudar.

    Na verdade eu não preciso saber o index da linha.

    Eu só acho que estou com o código errado, veja:

    Eu quero executar meu método "monta()" apenas se as celulas de 0 a 11 de todas as linhas estiverem preenchidas.

    Se não é apresentada a do MessageshowBox.

    acontece que a ultima célula é a 12.

    E esta célula pode ficar em branco...é um campo de observações que pode ou não ser preenchido a depender o usuário.

    O meu problema é que com este código que fiz o sistema esta me obrigando a preencher todas as células, inclusive a 12.

    sexta-feira, 10 de julho de 2015 18:47
  • Em qual código você atualizou o if que eu postei? no teu código original?

    Outra pergunta, essa sua célula é a ultima?

    sexta-feira, 10 de julho de 2015 18:52
  • Sim.. atualizei no meu código original.

    coloquei como abaixo.

    E sim...essa celula é a ultima.

    foreach (DataGridViewRow linha in this.dataGridView1.Rows)
                {
                    if (linha.Index == 12) // o index 12 significa que a linha será a 13, pois o index inicia pelo 0 e não pelo 1, se não funcionar
                        //só troque o 12 por 11;
                        continue;
    
                   foreach (DataGridViewCell cell in linha.Cells)
                    {
                        if (cell.Value == null || cell.Value.Equals("") && cell.RowIndex != 12)
                        {
                            MessageBox.Show("Verifique se todos os campos necessários para a operação foram preenchidos corretamente.", "Varrendo linhas", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            break;
                        }
                        else
                        {
                            monta();
                            break;
                        }
    
                    }
                }

    sexta-feira, 10 de julho de 2015 19:03
  • Você não precisa mais do primeiro teste, o if você tem que atualizar é no código que tu postasse.

    Ficaria assim.

                foreach (DataGridViewRow linha in this.dataGridView1.Rows)
                {
                    foreach (DataGridViewCell cell in linha.Cells)
                    {
                        if ((cell.Value == null || cell.Value.Equals("")) && cell.RowIndex != 12)
                        {
                            MessageBox.Show("Verifique se todos os campos necessários para a operação foram preenchidos corretamente.", "Varrendo linhas", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            break;
                        }
                        else
                        {
                            monta();
                            break;
                        }
    
                    }
                }
    Observe que o if do código acima é diferente do código que você postou.

    Apenas se certifique que o index é 12 e não 11.

    sexta-feira, 10 de julho de 2015 19:05
  • Bruno, fiz assim:

    foreach (DataGridViewRow linha in this.dataGridView1.Rows)
                {
                    foreach (DataGridViewCell cell in linha.Cells)
                    {
                        if ((cell.Value == null || cell.Value.Equals("")) && cell.RowIndex != 12)
                        {
                            MessageBox.Show("Verifique se todos os campos necessários para a operação foram preenchidos corretamente.", "Varrendo linhas", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            break;
                        }
                        else
                        {
                            MessageBox.Show("passou.", "Varrendo linhas", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            break;
                        }
    
                    }
                }

    Quando eu preencho a celula de index 0 até a 4...o sistema apresenta a Mensagem do if...Quando preencho até a celula 5...mostra a mensagem do else.

    sendo que da celula 6 a 11 ainda precisa ser preenchida.

    OBS: Não sei se isso muda algo, mas existem 3 celulas que são do tipo combobox.

    sexta-feira, 10 de julho de 2015 21:51
  • Renato, assim que possível farei um teste aqui e postarei o código.
    sábado, 11 de julho de 2015 01:26
  • Certo.
    domingo, 12 de julho de 2015 13:22
  • Poderia postar como você faz para adicionar os dados e como você cria as colunas do DataGrid?
    segunda-feira, 13 de julho de 2015 13:21
  • As colunas são criadas via dataset tipado.

    E abaixo o método que insere os dados.

    public void monta()
            {
               
            
                        try
                        {
                            using (SqlConnection Conexao = new SqlConnection(Properties.Settings.Default.GestaoFrotaConnectionString))
                            {
                                using (SqlCommand Comando = new SqlCommand())
                                {
                                    Comando.Connection = Conexao;
                                    Comando.CommandText = "INSERT INTO MONTAGEM (ITEM, SERIE, PLACA, MEDIDA, DOT, ALTMM, EIXO, LADO, CLASSE, KMMONTAGEM, NRMONT, TIPO, OBS, USUARIO, DATA, DESMONTOU) VALUES (@ITEM, @SERIE, @PLACA, @MEDIDA, @DOT, @ALTMM, @EIXO, @LADO, @CLASSE, @KMMONTAGEM, @NRMONT, @TIPO, @OBS, @USUARIO, @DATA, @DESMONTOU)";
                                    Conexao.Open();
    
                                    foreach (DataGridViewRow linha2 in dataGridView1.Rows)
                                    {
    
                                        Comando.Parameters.Clear();
                                        Comando.Parameters.AddWithValue("@ITEM", linha2.Cells[0].Value.ToString());
                                        Comando.Parameters.AddWithValue("@SERIE", linha2.Cells[1].Value.ToString());
                                        Comando.Parameters.AddWithValue("@PLACA", linha2.Cells[2].Value.ToString());
                                        Comando.Parameters.AddWithValue("@MEDIDA", linha2.Cells[3].Value.ToString());
                                        Comando.Parameters.AddWithValue("@DOT", linha2.Cells[4].Value.ToString());
                                        Comando.Parameters.AddWithValue("@ALTMM", linha2.Cells[5].Value.ToString());
                                        Comando.Parameters.AddWithValue("@EIXO", linha2.Cells[6].Value.ToString());
                                        Comando.Parameters.AddWithValue("@LADO", linha2.Cells[7].Value.ToString());
                                        Comando.Parameters.AddWithValue("@CLASSE", linha2.Cells[8].Value.ToString());
                                        Comando.Parameters.AddWithValue("@KMMONTAGEM", linha2.Cells[9].Value.ToString());
                                        Comando.Parameters.AddWithValue("@NRMONT", linha2.Cells[10].Value.ToString());
                                        Comando.Parameters.AddWithValue("@TIPO", linha2.Cells[11].Value.ToString());
                                        Comando.Parameters.AddWithValue("@OBS", linha2.Cells[12].Value.ToString());
                                        Comando.Parameters.AddWithValue("@USUARIO", frmLogin.USUARIO);
                                        Comando.Parameters.AddWithValue("@DATA", DateTime.Today.ToShortDateString());
                                        Comando.Parameters.AddWithValue("@DESMONTOU", "NAO".ToString());
    
                                        Comando.ExecuteNonQuery();
                                                                                                              
                                    }
                                    Conexao.Close();
                                    MessageBox.Show("Operação Realizada", "Confirmando", MessageBoxButtons.OK, MessageBoxIcon.Information);
    
                                    this.Close();
                                }
                            }
                        }
                        catch (Exception)
                        { }
    
                    }

    E aqui o código que verifica se os campos obrigatórios estão em branco.

    private void toolStripConfirma_Click(object sender, EventArgs e)
            {
                foreach (DataGridViewRow linha in this.dataGridView1.Rows)
                {
                    foreach (DataGridViewCell cell in linha.Cells)
                    {
                        if ((cell.Value == null || cell.Value.Equals("")) && cell.RowIndex != 12)
                        {
                            MessageBox.Show("Verifique se todos os campos necessários para a operação foram preenchidos corretamente.", "Varrendo linhas", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            break;
                        }
                        else
                        {
                            MessageBox.Show("passou.", "Varrendo linhas", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            break;
                        }
    
                    }
                }
            }

    segunda-feira, 13 de julho de 2015 15:30
  • E as colunas do DataGrid, como você adiciona elas?
    segunda-feira, 13 de julho de 2015 16:15
  • As colunas eu adciono de acordo aos dados vindo do dataSource.
    segunda-feira, 13 de julho de 2015 17:50
  • Bruno, para garantir a informação correta eu refiz o datagridview todo e continua se comportando da mesma forma.

    Eu tinha dito que as colunas são criadas via dataSource mas me equivoquei, Eu crio o dataGridview no form pela paleta...e depois adciono as colunas manualmente pelo VS.

    quarta-feira, 15 de julho de 2015 13:41
  • Bruno, para garantir a informação correta eu refiz o datagridview todo e continua se comportando da mesma forma.

    Eu tinha dito que as colunas são criadas via dataSource mas me equivoquei, Eu crio o dataGridview no form pela paleta...e depois adciono as colunas manualmente pelo VS.

     Olá Renato, o codigo esta errado, só para finalizar você quer executar o metodo "monta" a cada iteração ou somente se o datagrid todo estiver com dados preenchidos corretamente ?
    quarta-feira, 15 de julho de 2015 14:08
  • Bruno, para garantir a informação correta eu refiz o datagridview todo e continua se comportando da mesma forma.

    Eu tinha dito que as colunas são criadas via dataSource mas me equivoquei, Eu crio o dataGridview no form pela paleta...e depois adciono as colunas manualmente pelo VS.

    Esse seu projeto é muito grande? Teria como tu me enviar para que eu possa dar uma olhada?
    quarta-feira, 15 de julho de 2015 14:33
  • Fala Daniel, beleza?

    Quero executar o método somente se estiver com tudo preenchido.

    Olha tive uma trabalheira danada, fiz teste de celula a celula com o código abaixo e agora ele funcionou perfeitamente.

    Irei fazer alterar o código para a forma correta.

    Sofri bastante com este impasse...mas aprendi muita coisa.

    O erro estava na celula 9, que estava recebendo o valor "" quando uma celula antes dela era preenchida errada.

    Alterei a forma como o valor da celula 9 tinha que ser preenchida caso a celula anterior fosse preenchida errada de "" para null e o problema sumiu.

    Agradeço pela sua ajuda e pela ajuda do Bruno, um abração pra vocês.

    foreach (DataGridViewRow linha in this.dataGridView1.Rows)
                {
    
                        if (linha.Cells[0].Value != null)
                        {
                            if (linha.Cells[1].Value != null)
                            {
                                if (linha.Cells[2].Value != null)
                                {
                                    if (linha.Cells[3].Value != null)
                                    {
                                        if (linha.Cells[4].Value != null)
                                        {
                                            if (linha.Cells[5].Value != null)
                                            {
                                                if (linha.Cells[6].Value != null)
                                                {
                                                    if (linha.Cells[7].Value != null)
                                                    {
                                                        if (linha.Cells[9].Value != null)
                                                        {
                                                            if (linha.Cells[11].Value != null)
                                                            {
    
                                                            }
                                                            else
                                                            {
                                                                MessageBox.Show("Alguma linha está com o campo TIPO vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            MessageBox.Show("Alguma linha está com o campo KM.MONTAGEM vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        MessageBox.Show("Alguma linha está com o campo LADO vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                    }
                                                }
                                                else
                                                {
                                                    MessageBox.Show("Alguma linha está com o campo EIXO vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                }
                                            }
                                            else
                                            {
                                                MessageBox.Show("Alguma linha está com o campo ALT.MM vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                            }
                                        }
                                        else
                                        {
                                            MessageBox.Show("Alguma linha está com o campo DOT vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        }
                                    }
                                    else
                                    {
                                        MessageBox.Show("Alguma linha está com o campo PNEU vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("Alguma linha está com o campo PLACA vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                            }
                            else
                            {
                                MessageBox.Show("Alguma linha está com o campo SERIE vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Alguma linha está com o campo ITEM vazio.\n Significa que você não terminou o preenchimento dos campos corretamente.", "Varrento linha", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    
                    
                }


    • Marcado como Resposta Renato Cristiano quinta-feira, 16 de julho de 2015 15:40
    quarta-feira, 15 de julho de 2015 14:36
  • Bruno, muito obrigado mesmo pelo esforço!

    Conforme respondi encontrei o problema, bati cabeça com um errinho bem descarado.

    Me desculpe pela trabalheira que te dei, um grande abraço.

    quarta-feira, 15 de julho de 2015 14:38
  • Sem problemas Renato, só não esqueça de marcar como resposta se alguma resposta te ajudou.

    Abraço.

    quarta-feira, 15 de julho de 2015 16:55