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