VB .NET - Incluindo um CheckBox em um DataGridView


Nesta dica vou mostrar como incluir um checkbox em um DataGridView em uma aplicação Windows Application.

Vou usar o Visual Basic 2010 Express Edition.

Inicie o VB 2010 Express e crie um novo projeto do tipo Windows Forms Application com o nome :CheckBoxDataGridView

No formulário form1.vb inclua , a partir da ToolBox, um controle DataGridView (name = gdvDados) e um controle Button (name = btnTeste), conforme o leiaute da figura abaixo:

A seguir selecione o controle DataGridView e na janela de propriedades selecione a propriedade Columns e clique em Collection;

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.

Na janela Solution Explorer clique no ícone View Code e a seguir inclua o código abaixo no formulário:

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     gdvDados.DataSource = Tabela()
End Sub

Private Function Tabela() As DataTable
Dim dt As New DataTable("Macoratti")
'cria as colunas codigo e nome e inclui no DataTable;
Dim codigo As New DataColumn("codigo")
dt.Columns.Add(codigo)
Dim nome As New DataColumn("nome")
dt.Columns.Add(nome)
'Agora que ja temos duas colunas vamos incluir valores a elas
Dim dr As DataRow
For i As Integer = 1 To 10
   dr = dt.NewRow()
   dr("codigo") = i
   dr("nome") = "Macoratti " & i
   dt.Rows.Add(dr)
Next
Return dt
End Function
End Class

Este código apenas cria um DataTable com duas colunas (codigo e nome) e atribui alguns valores a elas.

Agora vamos definir o código abaixo no evento Click do botão Selecionar :

Private Sub btnTeste_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTeste.Click

For Each dr As DataGridViewRow In gdvDados.Rows
     If dr.Cells(0).Value IsNot Nothing Then
      
  'Na primeira célula Cells[0] foi adicionado o checkbox
        MessageBox.Show("Linha(s) " + dr.Index.ToString & " selecionada(s) ")
      End If
Next
End Sub

Este código percorre as linhas do DataGridView e verifica se a primeira célula (a célula que contém o CheckBox) possui algum valor;

Executando o projeto e selecionado alguns controles checkbox e clicando no botão Linhas Selecionadas será exibido o valor do índice da linha em um caixa de mensagem:

Se você desejar exibir o valor selecionado ou tratá-lo poderá usar o seguinte código no evento Click:

Private Sub btnTeste_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTeste.Click

For i As Integer = 0 To gdvDados.Rows.Count - 1
     If Convert.ToBoolean(gdvDados.Rows(i).Cells(0).Value) Then
            MessageBox.Show(gdvDados.Rows(i).Cells(2).Value.ToString())
     End If
Next
End Sub

Executando o projeto e selecionado alguns controles checkbox e clicando no botão Linhas Selecionadas será exibido o valor da coluna Nome (Cells(2));

Marcando e Desmarcando todas as checkbox

Vou mostrar agora como podemos marcar e/ou desmarcar todas as checkbox incluídas no DataGridView.

Para vamos incluir um novo botão de comando - Selecionar Tudo (name=btnSelecionar) no formulário e incluir no seu evento Click o código abaixo:

Private Sub btnMarcaDesmarca_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMarcaDesmarca.Click
For Each row As DataGridViewRow In gdvDados.Rows
        row.Cells(0).Value = True
 Next
End Sub

Neste código percorre todas as linhas do DataGridView e marca todos os checkbox

Para limpar todos os checkbox inclua um novo botão de comando - Limpar (name=bntLimpar) no formulário e incluir no seu evento Click o código abaixo:

Private Sub btnLimpar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpar.Click
For Each row As DataGridViewRow In gdvDados.Rows
     row.Cells(0).Value = False
Next
End Sub

Pegue o projeto completo aqui: CheckBoxDataGridView.zip

"Em verdade , em verdade vos digo que vem a hora, e agora é, em que os mortos ouvirão a voz do Filho de Deus, e os que a ouvirem viverão."(João-5:25)

Referências:


José Carlos Macoratti