none
Erro: ''O índice estava fora do intervalo. Ele deve ser não-negativo e menor que o tamanho da coleção". RRS feed

  • Pergunta

  • Boa noite. Estou fazendo um projeto para escola, no qual, fiquei travado em um problema. Tenho duas tabelas no BD(pedidos e itens_pedido) e ao tentar cadastrar o pedido ocorre o erro citado acima. A tabela itens_pedido(onde ocorre o erro)deve receber o código do cardápio (que é a mesma coisa que produto, entretanto ao pegar o valor de uma dataGridView ocorre o erro citado acima).

    Sou grato pela ajuda desde já.

    Código que contêm o erro:

    //cadatrar itens pedido
                modeloItensPedido mItens = new modeloItensPedido();
                int codPedido;
                codPedido = Convert.ToInt32(label9.Text);
              int linhas = dataGridView3.RowCount;
                  for (int i = 0; i < linhas; i++)
                  {

                      
                      mItens.setCodigoPedido(Convert.ToInt32(codPedido));
                      mItens.setCodigoCardapio(Convert.ToInt32(dataGridView2.Rows[i].Cells[0].Value.ToString()));//linha do erro
                      mItens.setprecoProduto(Convert.ToDecimal(dataGridView2.Rows[i].Cells[2].Value));
                      mItens.setquantidade(Convert.ToInt32(dataGridView2.Rows[i].Cells[3].Value));
                      //grava os valores dos atributos (modeloCidade) na tabela do BD
                      resp = cPedido.cadastraItens(mItens);
                   
                  }
                  MessageBox.Show(resp);

    terça-feira, 28 de agosto de 2018 01:12

Respostas

  • Olá amigo!

    A propriedade RowCount da dataGridView conta todas linhas incluindo o header da grid por isso ele está dando este erro. Para contornar o problema faz o seguinte:

    int linhas = dataGridView3.RowCount;
                  for (int i = 0; i <= linhas - 1; i++){ ...... }

    Espero que te ajudou.

    • Sugerido como Resposta Timóteo Nkawa terça-feira, 28 de agosto de 2018 07:21
    • Marcado como Resposta nomeAleatorio123 sábado, 1 de setembro de 2018 20:33
    • Não Marcado como Resposta nomeAleatorio123 sábado, 1 de setembro de 2018 20:33
    • Marcado como Resposta nomeAleatorio123 sábado, 1 de setembro de 2018 20:35
    terça-feira, 28 de agosto de 2018 07:21

Todas as Respostas

  • Olá amigo!

    A propriedade RowCount da dataGridView conta todas linhas incluindo o header da grid por isso ele está dando este erro. Para contornar o problema faz o seguinte:

    int linhas = dataGridView3.RowCount;
                  for (int i = 0; i <= linhas - 1; i++){ ...... }

    Espero que te ajudou.

    • Sugerido como Resposta Timóteo Nkawa terça-feira, 28 de agosto de 2018 07:21
    • Marcado como Resposta nomeAleatorio123 sábado, 1 de setembro de 2018 20:33
    • Não Marcado como Resposta nomeAleatorio123 sábado, 1 de setembro de 2018 20:33
    • Marcado como Resposta nomeAleatorio123 sábado, 1 de setembro de 2018 20:35
    terça-feira, 28 de agosto de 2018 07:21
  • o erro é o mesmo

    terça-feira, 28 de agosto de 2018 16:51
  • nomeAleatorio123,

       Perguntas:

        1 - Qual é o valor da variável "i" quando aparece o erro?

        2 - Você pode colocar o texto da descrição do erro?

    []'s,
    Fabio I.

    terça-feira, 28 de agosto de 2018 17:01
  • Saudações. Porque você esta setando valores do DataGridView2 se o for é referente ao DataGridView3?

    Apenas para melhorar faça a varredura no data grid assim.

    //percorrer todos os registros de um datGridView
    for(Int32 i  = 0; i < meuDataGridView.Rows.Count; i ++)
    {
       //obtem o valor da primeira coluna(Cells[0]) de cada linha (Rows[i])
       String texto = meuDataGrid.Rows[1].Cells[0].Value.ToString();
    }

    caso queira ver outra forma de varrer um data grid, apenas para conhecimento segue o link:

    Se te ajudei não esqueça de marcar a resposta.
    • Editado Agnaldo Guimarães terça-feira, 28 de agosto de 2018 23:33
    • Sugerido como Resposta Fabio I quarta-feira, 29 de agosto de 2018 10:41
    terça-feira, 28 de agosto de 2018 23:23