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:


José Carlos Macoratti