Verificar checkbox em gridview

02/01/2015

0

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


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

Jair Souza

Responder

Post mais votado

05/01/2015

Consegui o efeito esperado com o seguinte código:
        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.

Soeuseijothaz

Soeuseijothaz
Responder

Mais Posts

04/01/2015

Soeuseijothaz

Tenta assim:

foreach (GridViewRow gvItem in SeuGridView.Rows)
{
	CheckBox ck;
	ck = (CheckBox)gvItem.FindControl("SeuCheck");
	if (ck.Checked)
	{
		 BtnDevolucao.Enabled = true;
		  break;
	}
}
Responder

04/01/2015

Jair Souza

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

05/01/2015

Soeuseijothaz

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

05/01/2015

Jair Souza

Funcionou, e não precisou do evento CellContentDoubleClick.

Valeu, muito obrigado !
Responder

06/01/2015

Soeuseijothaz

Funcionou, e não precisou do evento CellContentDoubleClick.

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

07/01/2015

Jair Souza

Realmente tens razão, tem que ter o CellContentDoubleClick.
Valeu !
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar