Usuário com melhor resposta
DataGridView Coluna checkBox readOnly

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
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
-
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
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 -
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
-
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
-
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