C # - Usando CheckBoxk em um DataGridView
Neste artigo eu vou mostrar como usar o controle CheckBox em um DataGridView usando a linguagem C# visto que eu já publiquei um artigo sobre o assunto para a linguagem VB .NET.
Você geralmente usa o controle CheckBox no DataGridView para indicar uma seleção de um item ou definir um estado como verdadeiro ou falso.
Definindo uma coluna do tipo CheckBoxk via código
Abra o Visual C# 2010 Express Edition e crie um novo projeto do tipo Windows Forms Application com o nome checkBox_DataGridView;
A seguir no formulário fom1.cs inclua um controle DataGridView;
No evento Load do formulário vamos criar um DataTable e definir duas colunas :
A seguir vamos criar dois arrays com valores para preencher o objeto DataTable e a seguir vincular o DataTable ao controle DataGridView.
Você vai notar que após esta definição ao executar o projeto o controle DataGridView exibirá uma coluna já convertida para checkbox onde os valores true estarão marcados e os valores false desmarcados.
A seguir temos o código que faz esta operação no evento Load do formulário form1.cs:
private void Form1_Load(object sender, EventArgs e) { //cria um objeto DataTable DataTable dt = new DataTable(); //inclui duas colunas no datatable definindo o seu tipo como booleano e string dt.Columns.Add("Estado", typeof(bool)); dt.Columns.Add("Nome", typeof(string)); //cria um array do tipo string com nomes string[] nomes = { "Macoratti", "Jefferson", "Janice", "Jessica", "Miriam" }; //define um array com valores booleanos bool[] status = { true, true, false, false, false }; //inclui linhas e valores no datatable for (int i = 0; i < 5; i++) { DataRow dr = dt.NewRow(); dr["Estado"] = status[i]; dr["Nome"] = nomes[i]; dt.Rows.Add(dr); } //vincula os valores do datatable no DataGridView dataGridView1.DataSource = dt; } |
Ao executar o projeto você verá o formulário abaixo:
Vamos agora mostrar como podemos exibir os valores definidos na coluna do tipo checkbox do controle DataGridView.
Para isso vamos usar o evento CellContentClick, este evento é disparado quando o usuário clica no conteúdo de uma célula.
Abaixo temos o código para o tratamento do evento:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { /// Este evento é disparado quando o usuário clica no conteúdo de uma célula /// Vamos exibir uma mensagem contendo os valores true ou valse refletindo os /// o valores da coluna checkbox /// //Verificamos se e somente se a celula checkbox (Estado) foi clicada if (e.ColumnIndex == dataGridView1.Columns["Estado"].Index) { //interrompe a edição dataGridView1.EndEdit(); //exibe os valores da célula quando clicada: verdadeiro (true) ou falso (false) MessageBox.Show("=> " + dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString()); } } |
Executando o projeto e clicando em um célula da coluna Estado teremos a exibição da caixa de mensagem:
Incluindo uma coluna do tipo CheckBox via assistente
Uma outra forma de incluir uma coluna do tipo CheckBox em um DataGridView e seguir o seguinte roteiro:
Vamos incluir um novo formulário no projeto via menu Project->Add Windows Forms e aceitar o nome padrão form2.cs;
1- Inclua um controle DataGridView no formulário form2.cs;
2 - Selecione o controle DataGridView e na janela de propriedades selecione a propriedade Columns e clique em Collection;
3- Na janela Edit Columns clique no botão Add e a seguir informe o nome chkColuna e selecione o tipo DataGridViewCheckBoxColumn e defina o texto do cabeçalho como Selecionar conforme mostra a sequência de figuras a seguir:
Incluindo uma nova coluna | Definindo a coluna como CheckBox | Definindo o nome e texto da coluna |
O resultado final desta etapa deve ser o exibido na figura abaixo:
Agora que já temos uma coluna do tipo CheckBox vamos mostrar uma das forma de utilizar este recurso.
Vamos agora definir uma rotina que será a nossa fonte de dados. Vamos definir um DataTable com alguns dados para vincular no DataGridView:
/// <summary> /// Cria um DataTable para vincular no DataGridView /// </summary> /// <returns>DataTabe</returns> private DataTable fonteDadosDataTable() { DataTable dt = new DataTable("macorattiDataTable"); //Cria colunas no DataTable; //cria a coluna id e inclua no datatable DataColumn id = new DataColumn("id"); dt.Columns.Add(id); //cria a coluna nome e inclui no datatable DataColumn nome = new DataColumn("nome"); dt.Columns.Add(nome); //Inclui alguns dados no DataTable DataRow dr; for (int contador = 0; contador <= 9; contador++) { dr = dt.NewRow(); dr["id"] = contador; dr["nome"] = "Macoratti " + contador; dt.Rows.Add(dr); } return dt; } |
Agora no evento Load do formulário form2.cs vamos chamar a rotina e atribuir ao controle DataGridView:
private void Form2_Load(object sender, EventArgs e) { gdvDados.DataSource = fonteDadosDataTable(); } |
Vamos incluir um controle Button no formulário para permitir ao usuário exibir as linhas selecionadas do controle DataGridView conforme o leiaute abaixo:
No evento Click deste botão vamos incluir o código que vai exibir o número da linha que foi selecionada:
private void button1_Click(object sender, EventArgs e) { //percorre as linhas do controle DataGridView foreach (DataGridViewRow dr in gdvDados.Rows) { //valos exibir a linha da [0](Cells[0]) pois ela representa a coluna checkbox //que foi selecionada if (dr.Cells[0].Value != null) { MessageBox.Show("Linha " + dr.Index + " foi selecionada"); } } } |
Executando o projeto e selecionando algumas linhas teremos:
Pegue o projeto completo aqui: checkBox_DataGridView.zip
Marcos 11:23
Em verdade vos digo que qualquer que disser a este monte: Ergue-te e lança-te no mar; e não duvidar em seu coração, mas crer que se fará aquilo que diz, assim lhe será feito.Referências: