none
DataGridView Coluna checkBox readOnly RRS feed

  • Pergunta

  • Boa tarde,

    Estou tendo o seguinte problema: criei um dataGridView que é abastecido, através da propriedade DataSource, de uma consulta LinqToSQL e neste grid preciso colocar uma coluna do tipo checkBox, não relacionado ao banco de dados. Até ai tudo bem, eu consegui, mais quando eu clico na coluna o "value" não está sendo alterado.

    Já tente da seguinte forma:

            private void dgvContaReceber_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if (e.ColumnIndex == 6)
                {
                    //MessageBox.Show(dgvContaReceber.CurrentRow.Cells[e.ColumnIndex].Value.ToString()); //Está pegando o valor da coluna, como esperado
                    this.dgvContaReceber.CurrentRow.Cells[e.ColumnIndex].Value = !Convert.ToBoolean(this.dgvContaReceber.CurrentRow.Cells[e.ColumnIndex].Value);
                }
            }

    Obs.: a propriedade readOnly no gridView já está com "false" mais quando tento mudar esta mesma propriedade na coluna, através do código abaixo, é gerada uma exceção "invalidOperationException". Na message da exceção diz o seguinte: "A coluna DataGridView ligada a um campo somente leitura deve ter ReadOnly definida como True."

    dgvContaReceber.Columns[6].ReadOnly = false;

    Vou colocar, também, a consulta LinqToSQL:

            public static object selecionaContaReceber(int id)
            {
                var cr = from a in DC.ParcelasFaturamento
                         join b in DC.Faturamento on a.IdFaturamento equals b.IdFaturamento
                         join c in DC.Pedido on b.IdPedido equals c.IdPedido
                         where c.IdPessoaCLiente == id && a.Status == null
                         select new
                         {
                             b.IdFaturamento,
                             a.NumeroDaParcela,
                             dtfat = b.DataFaturamento.ToShortDateString(),
                             dtven = a.Vencimento.ToShortDateString(),
                             vl = string.Format("{0:N2}", a.ValorParcela),
                             b.IdPedido,
                             TF = false //este campo é o checkBox
                         };
               
    Alguém pode me ajudar, pois nos outros tópicos não consegui achar respostas?

    Agradeço desde já.

    Gabriel Rodrigues Alves.



    • Editado galves.rod sábado, 18 de fevereiro de 2012 16:48
    sábado, 18 de fevereiro de 2012 16:46

Respostas

  • Você pode deixar a coluna do checkbox sem vínculo com a propriedade do linq que irá funcionar normalmente, tira esse TF do linq e desse jeito conseguirá checkar a coluna normalmente.

    Bruno Ferreira de Souza
    MSP - Microsoft Student Partner
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    MCC - Microsoft Community Contributor
    www.maestrodotnet.com.br
    @BrunoMaestro

    • Marcado como Resposta galves.rod terça-feira, 28 de fevereiro de 2012 00:56
    segunda-feira, 27 de fevereiro de 2012 19:24
  • Como foi que não tentei fazer isso antes, obrigado Bruno, agora enxerguei a luz....

    A solução é bem simples, mais caso alguém ainda fique com alguma dúvida, eis a solução:

    DataGridViewCheckBoxColumn colCheck = new DataGridViewCheckBoxColumn();
                    dgvContaReceber.Columns.Add(colCheck);

    Obrigado mais uma vez.

    • Marcado como Resposta galves.rod terça-feira, 28 de fevereiro de 2012 00:56
    terça-feira, 28 de fevereiro de 2012 00:56

Todas as Respostas

  • Prezado,

    Não consegui entender direito... Você adicionou a CheckBoxColumn na mão e quando você clica o checkbox fica checado ou não? O problema está só quando você tenta pegar o .Value?


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    quarta-feira, 22 de fevereiro de 2012 19:58
    Moderador
  • Vou tentar explicar melhor, tenho um dataGridView que é populado utilizando linqToSQL. Neste grid, além dos dados do meu BD preciso criar uma coluna checkBox. Eu fiz isso através do código: "TF = false" no final da consulta Linq, que insere uma coluna "TF" com o checkBox desmarcado por default.


    O meu problema é justamente em marcar este checkBox. Pesquisando um pouco sobre a solução, encontrei aqui no fórum o thread http://social.msdn.microsoft.com/forums/pt-br/vscsharppt/thread/1C951B0E-FC02-4F7E-874F-EDE3C73D393C. Tentei segui-ló, já que o problema é igual, mais tive problemas já que na minha consulta eu utilizo o join e, portanto, não consigo tirar o "select new{  }" conforme orienta a resposta dada.

    Espero ter consigo ilustrar melhor o meu problema.

    Grato.

    Gabriel Alves

    quinta-feira, 23 de fevereiro de 2012 14:50
  • Você pode deixar a coluna do checkbox sem vínculo com a propriedade do linq que irá funcionar normalmente, tira esse TF do linq e desse jeito conseguirá checkar a coluna normalmente.

    Bruno Ferreira de Souza
    MSP - Microsoft Student Partner
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    MCC - Microsoft Community Contributor
    www.maestrodotnet.com.br
    @BrunoMaestro

    • Marcado como Resposta galves.rod terça-feira, 28 de fevereiro de 2012 00:56
    segunda-feira, 27 de fevereiro de 2012 19:24
  • Como foi que não tentei fazer isso antes, obrigado Bruno, agora enxerguei a luz....

    A solução é bem simples, mais caso alguém ainda fique com alguma dúvida, eis a solução:

    DataGridViewCheckBoxColumn colCheck = new DataGridViewCheckBoxColumn();
                    dgvContaReceber.Columns.Add(colCheck);

    Obrigado mais uma vez.

    • Marcado como Resposta galves.rod terça-feira, 28 de fevereiro de 2012 00:56
    terça-feira, 28 de fevereiro de 2012 00:56