none
DataGridViewComboBoxColumn adicionar uma lista com duas opções RRS feed

  • Pergunta

  • Gostaria de adicionar uma lista em um DataGridView.

    Para isto criei uma das colunas do DataGridView como ComboBoxColumn e tentei inserir conforme abaixo.

                                DataGridViewComboBoxColumn lista = new DataGridViewComboBoxColumn();
                                lista.HeaderText = "Unid.";
                                lista.Items.Add("UN");
                                lista.Items.Add("CX");
                                lista.Name = "lista";

                                meuDataGridView.Rows.Add
                                (new object[] 
                                {
                                    cod, nome, lista, quantidade, total
                                }
                                );

    Mas aparece o seguinte erro.

    sexta-feira, 15 de janeiro de 2016 19:15

Respostas

  • o erro está ocorrendo pois voce está tentando adicionar um array para dentro da lista. 

     meuDataGridView.Rows.Add(0, cod);
     meuDataGridView.Rows.Add(1, nome);
     meuDataGridView.Rows.Add(2, lista);

    Por favor, lembre-se de “Marcar como Resposta” as respostas 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.

    • Sugerido como Resposta Erick WendelMVP sábado, 16 de janeiro de 2016 02:06
    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:52
    sábado, 16 de janeiro de 2016 02:05
  • Boa tarde.

    Acredito que tu estejas confundindo uma DataGridViewComboBoxColumn com uma DataGridViewComboBoxCell.

    A coluna é a coluna "física" e a célula é o resultado da interseção de uma linha com uma coluna.

    Levando isso em conta, uma forma de fazer o que tu desejas é a seguinte:

    List<object> lstSource = new List<object>() { "Item 1", "Item 2" };
    
                DataGridViewComboBoxColumn coluna = new DataGridViewComboBoxColumn();
                coluna.HeaderText = "Unid.";
                coluna.Name = "lista";
                coluna.DataSource = lstSource;
    
                dataGridView1.Columns.Add(coluna);
    
                dataGridView1.Rows.Add
                    (new object[]
                    {
                        "1", "Teste"
                    }
                    );

    Works like a charm.


    Att., Rafael Simor

    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:52
    sábado, 16 de janeiro de 2016 16:02
  • Rafael... sua solução passou bem perto do que eu desejaria, no caso eu troquei o .Add(Coluna) pelo .Insert(2, Coluna), mas como não é apenas uma linha que será inserida no grid, a cada linha inserida é adicionada ou inserida uma coluna nova.

    Bem... tentei várias variações de solução com base na sua ideia, mas não consegui o êxito.

    Acabei por decidir trabalhar com o grid de forma diferente, obrigado pela sua ajuda.

    • Marcado como Resposta Roger Nascimento segunda-feira, 18 de janeiro de 2016 14:21
    segunda-feira, 18 de janeiro de 2016 14:20

Todas as Respostas

  • o erro está ocorrendo pois voce está tentando adicionar um array para dentro da lista. 

     meuDataGridView.Rows.Add(0, cod);
     meuDataGridView.Rows.Add(1, nome);
     meuDataGridView.Rows.Add(2, lista);

    Por favor, lembre-se de “Marcar como Resposta” as respostas 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.

    • Sugerido como Resposta Erick WendelMVP sábado, 16 de janeiro de 2016 02:06
    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:52
    sábado, 16 de janeiro de 2016 02:05
  • Boa tarde.

    Acredito que tu estejas confundindo uma DataGridViewComboBoxColumn com uma DataGridViewComboBoxCell.

    A coluna é a coluna "física" e a célula é o resultado da interseção de uma linha com uma coluna.

    Levando isso em conta, uma forma de fazer o que tu desejas é a seguinte:

    List<object> lstSource = new List<object>() { "Item 1", "Item 2" };
    
                DataGridViewComboBoxColumn coluna = new DataGridViewComboBoxColumn();
                coluna.HeaderText = "Unid.";
                coluna.Name = "lista";
                coluna.DataSource = lstSource;
    
                dataGridView1.Columns.Add(coluna);
    
                dataGridView1.Rows.Add
                    (new object[]
                    {
                        "1", "Teste"
                    }
                    );

    Works like a charm.


    Att., Rafael Simor

    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:52
    sábado, 16 de janeiro de 2016 16:02
  • Estou testando e retorno aqui se deu certo.

    Por enquanto muito, muito obrigado!

    sábado, 16 de janeiro de 2016 20:41
  • Estou testando e retorno aqui se deu certo.

    Por enquanto muito, muito obrigado!

    sábado, 16 de janeiro de 2016 20:41
  • Esta resposta não deu certo, a cada .Add é adicionada uma nova linha e a cada momento em uma coluna diferente.

    segunda-feira, 18 de janeiro de 2016 14:16
  • Rafael... sua solução passou bem perto do que eu desejaria, no caso eu troquei o .Add(Coluna) pelo .Insert(2, Coluna), mas como não é apenas uma linha que será inserida no grid, a cada linha inserida é adicionada ou inserida uma coluna nova.

    Bem... tentei várias variações de solução com base na sua ideia, mas não consegui o êxito.

    Acabei por decidir trabalhar com o grid de forma diferente, obrigado pela sua ajuda.

    • Marcado como Resposta Roger Nascimento segunda-feira, 18 de janeiro de 2016 14:21
    segunda-feira, 18 de janeiro de 2016 14:20