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: