Usuário com melhor resposta
checkbox coluna

Pergunta
-
Ola,
Tenho uma gridview em q uma das colunas tem uma checkbox.
O problema é : qd tenho dois ou mais registos a partir do primeiro registo a contagem está sempre a zeros, isto é, só conta bem o primeiro registo.
bool entrar = true; bool entrar2 = true; foreach (DataGridViewRow row in dataGridView1.Rows) { countrow = Convert.ToInt16(row.Cells["checkbox"].Value); bool isSelected = Convert.ToBoolean(row.Cells["checkbox"].Value); if (!isSelected && entrar && countrow < 1 && entrar2) { MessageBox.Show("Selecionar um registo"); entrar = false; } else if (isSelected && entrar) { string valor = row.Cells["NrProc"].Value.ToString(); UpdateEstado(valor); entrar2 = false; } } if (entrar) { BindGrid(); MessageBox.Show("Concluido com sucesso"); }
Respostas
-
Diogo, veja este exemplo onde no clique de um botão "Processar" eu percorro as linhas do grid, verifico se o check esta marcado, se estiver eu desmarco, caso contrário ele é marcado. Ou seja, inverte a marcação. Veja:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TesteCheckGrid { public partial class Form1 : Form { public Form1() { InitializeComponent(); PreencherGrid(); } private void PreencherGrid() { List<Pessoa> lista = new List<Pessoa>(); Pessoa pessoa1 = new Pessoa(); pessoa1.Codigo = 1; pessoa1.Nome = "Rogerio"; lista.Add(pessoa1); Pessoa pessoa2 = new Pessoa(); pessoa2.Codigo = 1; pessoa2.Nome = "Maria"; lista.Add(pessoa2); Pessoa pessoa3 = new Pessoa(); pessoa3.Codigo = 1; pessoa3.Nome = "Luana"; lista.Add(pessoa3); Pessoa pessoa4 = new Pessoa(); pessoa4.Codigo = 1; pessoa4.Nome = "Jessica"; lista.Add(pessoa4); dataGridView1.DataSource = lista; } private void btnProcessar_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in dataGridView1.Rows) { DataGridViewCheckBoxCell oCell = row.Cells["Check"] as DataGridViewCheckBoxCell; bool bChecked = (null != oCell && null != oCell.Value && true == (bool)oCell.Value); if (!bChecked) row.Cells["Check"].Value = true; else row.Cells["Check"].Value = false; } } } }
ANTES
DEPOIS
Espero que te ajude. :)
Rodrigo Reis Ferreira
Microsoft Certified
Todas as Respostas
-
-
-
Diogo, veja este exemplo onde no clique de um botão "Processar" eu percorro as linhas do grid, verifico se o check esta marcado, se estiver eu desmarco, caso contrário ele é marcado. Ou seja, inverte a marcação. Veja:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TesteCheckGrid { public partial class Form1 : Form { public Form1() { InitializeComponent(); PreencherGrid(); } private void PreencherGrid() { List<Pessoa> lista = new List<Pessoa>(); Pessoa pessoa1 = new Pessoa(); pessoa1.Codigo = 1; pessoa1.Nome = "Rogerio"; lista.Add(pessoa1); Pessoa pessoa2 = new Pessoa(); pessoa2.Codigo = 1; pessoa2.Nome = "Maria"; lista.Add(pessoa2); Pessoa pessoa3 = new Pessoa(); pessoa3.Codigo = 1; pessoa3.Nome = "Luana"; lista.Add(pessoa3); Pessoa pessoa4 = new Pessoa(); pessoa4.Codigo = 1; pessoa4.Nome = "Jessica"; lista.Add(pessoa4); dataGridView1.DataSource = lista; } private void btnProcessar_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in dataGridView1.Rows) { DataGridViewCheckBoxCell oCell = row.Cells["Check"] as DataGridViewCheckBoxCell; bool bChecked = (null != oCell && null != oCell.Value && true == (bool)oCell.Value); if (!bChecked) row.Cells["Check"].Value = true; else row.Cells["Check"].Value = false; } } } }
ANTES
DEPOIS
Espero que te ajude. :)
Rodrigo Reis Ferreira
Microsoft Certified