none
Problemas para add um linha em datagridview RRS feed

  • Pergunta

  • Eu criei um metodo que ADD uma linha em uma DATAGrid mas em uma tela ele funciona perfeitamente mas na outra ele da o segunte erro : Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.

    o metodo eh esse:

     try
                {
                    string[] row = { to.nome, to.horas };
                    grid.Rows.Add(row);

                }
                catch (Exception ex)
                {
                    MessageBox.Show("Problema na aplicação que adiciona os recursos no grid. Erro : " + ex.Message, "Consolidador, Erro.", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                }


    quinta-feira, 17 de outubro de 2013 17:22

Todas as Respostas

  • Guilherme,

    Os dois DataGridView possuem a mesma estrutura de colunas e tipo de dados ??


    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    quinta-feira, 17 de outubro de 2013 17:28
  • os dados sao os mesmos mas um tem as colunas pre determinadas e o outro ela sao formadas através de um select 

    quinta-feira, 17 de outubro de 2013 17:31
  • em qual momento o método é chamado??

    --Rafael Albuquerque

    quinta-feira, 17 de outubro de 2013 17:34
  •  private void btnADD_Click(object sender, EventArgs e)
            {
                recursos_to.horas = txtHoras.Text;
                recursos_to.nome = txtNome.Text;
    
                if (txtHoras.Text != "" && txtNome.Text != "")
                {
                    recursos_neg.addRecurso(dgvRecursos, recursos_to);
                    txtTotalHoras.Text = neg_ST.calcularTotalHoras(dgvRecursos).ToString();
                }
                else
                {
                    MessageBox.Show("Informe os campos 'Nome' e 'Hora', para poder inserir as informações na Tabela de recursos para está ST", "Aviso");
                }
                txtNome.Clear();
                txtHoras.Clear();
                txtNome.Focus();
    
            }
    
    
    
     public void addRecurso(DataGridView grid, Recurso_TO to)
            {
                try
                {
                    string[] row = { to.nome, to.horas };
                    grid.Rows.Add(row);
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Problema na aplicação que adiciona os recursos no grid. Erro : " + ex.Message, "Consolidador, Erro.", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                }
            }

    quinta-feira, 17 de outubro de 2013 17:54
  • Tenta assim Guilherme

    try
    {
    // Caso seja windows forms
       string[] row = { to.nome, to.horas };
       grd.DataSource(row);
    
       //grid.Rows.Add(row);
    
    // Se for Web Forms
       string[] row = { to.nome, to.horas };
       grd.DataSource(row);
       grd.DataBind();
    
    }
    catch (Exception ex)
    {
                    MessageBox.Show("Problema na aplicação que adiciona os recursos no grid. Erro : " + ex.Message, "Consolidador, Erro.", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                }

    Espero que ajude.

    Se ajudou marque. 

    Abraço.


    Voce pode encarar um erro como uma besteira a ser esquecida, ou como um resultado que aponta uma nova direcao by Steve Jobs

    quinta-feira, 17 de outubro de 2013 17:57
  • po cara vlw mas nao da pra usar isso o Dgv nao reconhece o método DataSource();  
    quinta-feira, 17 de outubro de 2013 18:13
  • guilherme vc tem que trabalhar com essa grid dinâmica ou os campos podem ser fixos??

    pq adicionando esses seus dois campos na tabela e esse erro não acontece!


    --Rafael Albuquerque

    quinta-feira, 17 de outubro de 2013 18:31
  • assim na primeira tela os campos sao fixos pois eh uma tela de cadastro, já na segunda tela(tela de busca e alteração) eu nao determino um campo fixo no grid ele sao formados através de uma busca que faço no banco.

    ai tem 2 botões um que add mais recursos(linhas) e outro que remover recursos(linhas) para depois eu gravar as alterações feitas 

    quinta-feira, 17 de outubro de 2013 18:48
  • então nesse caso eu deixaria a grid com os campos fixos mesmo, já que pelo que me parece não ha necessidade dela ser dinâmica!

    ou pode fazer assim tb e adicionar os campos em tempo de execução:

    	    string[] row = { "RAFA", "ALBUQUERQUE" };
                grd.Columns.Add("NOME", "NOME");
                grd.Columns.Add("SOBRENOME", "SOBRENOME");
                grd.Rows.Add(row);

    nesse caso se vc pode fazer um metodo CriarCamposBusca() e CriarCamposAlteracao() removendo e adicionando as novas colunas.


    --Rafael Albuquerque



    • Editado RafaelBuca sexta-feira, 18 de outubro de 2013 10:41
    sexta-feira, 18 de outubro de 2013 10:33
  • mas fixando os campos eu consigo jogar os valores da busca que eu faço neles 
    sexta-feira, 18 de outubro de 2013 13:54
  • cara eu to ficando louco ja eu fixei os campos e deu erro, copiei e colei o grid da outra tela e o erro continua 

    sexta-feira, 18 de outubro de 2013 14:32
  • rs ... tenta assim:

    string[] row = { to.nome, to.horas };
    var qtdLinhas = grid.Columns.Count;
    for (int i = 0; i < qtdLinhas; i++)
    {
       grid.Columns.RemoveAt(0);
    }
    
    grid.Columns.Add("NOME", "NOME");
    grid.Columns.Add("HORAS", "HORAS");
    grid.Rows.Add(row);


    --Rafael Albuquerque

    sexta-feira, 18 de outubro de 2013 15:20
  • Código:

    Grid.Rows.Add(3);
    
    Grid.Rows[0].Cells[0].Value = "1";
    Grid.Rows[0].Cells[1].Value = "10/10/2010";
    Grid.Rows[0].Cells[2].Value = "250.00";
    Grid.Rows[0].Cells[3].Value = true;
    
    Grid.Rows[1].Cells[0].Value = "2";
    Grid.Rows[1].Cells[1].Value = "12/10/2010";
    Grid.Rows[1].Cells[2].Value = "1250.10";
    Grid.Rows[1].Cells[3].Value = false;
    
    Grid.Rows[2].Cells[0].Value = "3";
    Grid.Rows[2].Cells[1].Value = "14/1/2010";
    Grid.Rows[2].Cells[2].Value = "250.10";
    Grid.Rows[2].Cells[3].Value = true;

    Exemplo de Inserção!


    Fúlvio Cezar Canducci Dias

    sábado, 19 de outubro de 2013 23:06
  • ja resolvi o problema jogando o grid em data table, adicionando uma linha e depois devolvendo o datatable para o gird 
    segunda-feira, 28 de outubro de 2013 17:27
  • obrigado pela ajuda de todos

    segunda-feira, 28 de outubro de 2013 17:28