Verificar checkbox em gridview
Tenho este código para verificar se no grid tem pelo menos um checkbox checked, se tiver deve liberar o botão "Devolução", mas está funcionando somente na última linha...
ou este, mas o resultado é o mesmo :
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150102-194224.png[/img]
private void itemLocacaoDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { foreach (DataGridViewRow dr in itemLocacaoDataGridView.Rows) { if (bool.Parse(dr.Cells[0].EditedFormattedValue.ToString())) { BtnDevolucao.Enabled = true; } else { BtnDevolucao.Enabled = false; }
ou este, mas o resultado é o mesmo :
for (int i = 0; i < itemLocacaoDataGridView.Rows.Count; i++) { if (bool.Parse(itemLocacaoDataGridView[0, i].EditedFormattedValue.ToString())) { BtnDevolucao.Enabled = true; } else { BtnDevolucao.Enabled = false; }
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150102-194224.png[/img]
Jair Souza
Curtidas 0
Melhor post
Soeuseijothaz
05/01/2015
Consegui o efeito esperado com o seguinte código:
Inclui uma chamada ao método CellContentDoubleClick, se isto não for feito não vai funcionar.
Se o grid possuir muitas linhas pode afeta a performance, então deve-ser ficar atento a isto.
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("chk")) { ManipulaBotao(); } } private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("chk")) { ManipulaBotao(); } } private void ManipulaBotao() { button1.Enabled = false; foreach (DataGridViewRow dr in dataGridView1.Rows) { if (bool.Parse(dr.Cells["chk"].EditedFormattedValue.ToString())) { button1.Enabled = true; break; } } }
Inclui uma chamada ao método CellContentDoubleClick, se isto não for feito não vai funcionar.
Se o grid possuir muitas linhas pode afeta a performance, então deve-ser ficar atento a isto.
GOSTEI 1
Mais Respostas
Soeuseijothaz
02/01/2015
Tenta assim:
foreach (GridViewRow gvItem in SeuGridView.Rows) { CheckBox ck; ck = (CheckBox)gvItem.FindControl("SeuCheck"); if (ck.Checked) { BtnDevolucao.Enabled = true; break; } }
GOSTEI 0
Jair Souza
02/01/2015
Primeiro erro quando coloco o nome do meu grid :
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150104-165449.png[/img]
Se mudo no foreach para DataGridViewRow dá este outro erro :
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150104-165549.png[/img]
Será que está no evento certo ?
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150104-165449.png[/img]
Se mudo no foreach para DataGridViewRow dá este outro erro :
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150104-165549.png[/img]
Será que está no evento certo ?
GOSTEI 0
Soeuseijothaz
02/01/2015
Não vi que era windows forms, achei que web form.
Então favor desconsiderar esta resposta.
Sempre que você abrir um post é bom destacar que esta usando "windows form" ou "web form", assim facilitar a ajuda e fica mais produtivo.
Estou precisando de algo parecido em um windows form que tenho e estou tendo dificuldade e criar esta lógica.
Complica pois tem-se de preocupar com vários métodos: CellContentClick, CellValueChanged ou CellContentDoubleClick.
Se conseguir fazer posto o resultado aqui.
Então favor desconsiderar esta resposta.
Sempre que você abrir um post é bom destacar que esta usando "windows form" ou "web form", assim facilitar a ajuda e fica mais produtivo.
Estou precisando de algo parecido em um windows form que tenho e estou tendo dificuldade e criar esta lógica.
Complica pois tem-se de preocupar com vários métodos: CellContentClick, CellValueChanged ou CellContentDoubleClick.
Se conseguir fazer posto o resultado aqui.
GOSTEI 0
Jair Souza
02/01/2015
Funcionou, e não precisou do evento CellContentDoubleClick.
Valeu, muito obrigado !
Valeu, muito obrigado !
GOSTEI 0
Soeuseijothaz
02/01/2015
Funcionou, e não precisou do evento CellContentDoubleClick.
Valeu, muito obrigado !
Valeu, muito obrigado !
Sem querer ser chato, mas sendo chato, é prudente implementar usando o CellContentDoubleClick.
Dependendo da velocidade do duplo clique pode ocorrer do controle ficar habilitado sem nenhum check marcado.
O tratamento no método CellContentDoubleClick , para evitar aborrecimentos futuros.
Mas que bom que funcionou.
GOSTEI 0
Jair Souza
02/01/2015
Realmente tens razão, tem que ter o CellContentDoubleClick.
Valeu !
Valeu !
GOSTEI 0