.NET

26 ago, 2016

VB .NET – Criando um DataGridView no modo não vinculado

Publicidade

Neste artigo, vou mostrar como implementar o controle DataGridView usando o modo não vinculado ou unbound mode.

O DataGridView é muito usado para exibir dados de diversas fontes de dados, e isso é feito quase sempre no modo vinculado no qual você define uma fonte de dados, que geralmente é um banco de dados relacional, e utiliza a propriedade DataSource do controle para vincular os dados ao controle.

Ocorre que você pode precisar exibir dados tabulares cuja origem não seja um banco de dados. Por exemplo, você pode querer exibir o conteúdo de uma matriz bidimensional ou o conteúdo de um array ou de uma lista de strings, e por aí vai.

Para esses casos, o controle DataGridView fornece uma forma fácil e personalizável para exibir dados sem fazer a vinculação com a fonte de dados diretamente, mas usando o modo não vinculado.

Neste artigo, veremos como preencher um controle DataGridView, gerenciar a inclusão, exclusão de informações e adicionar novas linhas usando o modo não vinculado.

Recursos usados:

Criando o projeto no VS Community

Abra o VS Community 2015  e clique em New Project.

A seguir, selecione Visual Basic -> Windows -> Windows Forms Application.

Informe o nome DataGridView_UnBound e clique no botão OK.

vbn_1

Agora vamos implementar o Datagridview usando o modo não vinculado e preenchendo o controle com informações de músicas populares exibindo os dados.

1 – Definindo o código inicial no formulário form1.vb

No formulário form1.vb, vamos definir o código que contém uma inicialização básica, declarando algumas variáveis, que serão:

  • 1 Panel – pnlButton
  • 1 DataGridView – dgvMusicas
  • 2 Buttons – btnIncluirNovaLinha e btnDeletarLinha

Vamos definir também um método Main e um leiaute básico para o formulário no seu construtor.

Abaixo, temos o código e resultado da execução do projeto neste estágio:

Public Class Form1

    Private pnlButton As New Panel
    Private WithEvents dgvMusicas As New DataGridView
    Private WithEvents btnIncluirNovaLinha As New Button
    Private WithEvents btnDeletarLinha As New Button

    <STAThreadAttribute()>
    Public Shared Sub Main()
        Application.EnableVisualStyles()
        Application.Run(New Form1())
    End Sub

End Class

2 – Definindo o método para configurar o leiaute do formulário

No código abaixo, definimos no método DefinirLeiaute() o tamanho do formulário e as propriedades dos controles que vamos incluir no formulário.

Note que incluímos os botões no controle Panel (pnlButton) e depois incluímos o controle Panel no formulário:  Me.Controls.Add(Me.pnlButton).

Private Sub DefinirLeiaute()

        Me.Size = New Size(600, 500)
        With btnIncluirNovaLinha
            .Text = "Adicionar Nova Linha"
            .BackColor = Color.WhiteSmoke
            .Location = New Point(10, 10)
        End With
        With btnDeletarLinha
            .Text = "Deletar Linha"
            .BackColor = Color.WhiteSmoke
            .Location = New Point(100, 10)
        End With
        With pnlButton
            .Controls.Add(btnIncluirNovaLinha)
            .Controls.Add(btnDeletarLinha)
            .Height = 50
            .Dock = DockStyle.Bottom
        End With
        Me.Controls.Add(Me.pnlButton)
End Sub

3 – Definindo o método para configurar o controle DataGridView

O método ConfiguraDataGridView() inclui o controle na coleção de controles do formulário e configura linhas, colunas e algumas propriedades do DataGridView.

 Private Sub ConfiguraDataGridView()

        Me.Controls.Add(dgvMusicas)

        dgvMusicas.ColumnCount = 5
        With dgvMusicas.ColumnHeadersDefaultCellStyle
            .BackColor = Color.Navy
            .ForeColor = Color.White
            .Font = New Font(dgvMusicas.Font, FontStyle.Bold)
        End With

        With dgvMusicas
            .Name = "dgvMusicas"
            .Location = New Point(8, 8)
            .Size = New Size(500, 250)
            .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders
            .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
            .ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
            .CellBorderStyle = DataGridViewCellBorderStyle.Single
            .GridColor = Color.Black
            .RowHeadersVisible = False

            .Columns(0).Name = "Lançamento"
            .Columns(1).Name = "Faixa"
            .Columns(2).Name = "Título"
            .Columns(3).Name = "Artista"
            .Columns(4).Name = "Album"
            .Columns(4).DefaultCellStyle.Font = New Font(Me.dgvMusicas.DefaultCellStyle.Font, FontStyle.Italic)
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
            .MultiSelect = False
            .Dock = DockStyle.Fill
        End With
    End Sub

4 – Preenchendo o DataGridView com dados

O método PopularDataGridView() define alguns arrays de strings como dados do controle e atribui cada array à propriedade rows do controle, além de configurar a propriedade Columns para exibir os dados.

Private Sub PopularDataGridView()

        Dim linha0 As String() = {"22/11/1968", "29", "Revolution 9", "Beatles", "The Beatles [White Album]"}
        Dim linha1 As String() = {"08/03/1960", "6", "Fools Rush In", "Frank Sinatra", "Nice 'N' Easy"}
        Dim linha2 As String() = {"11/11/1971", "1", "One of These Days", "Pink Floyd", "Meddle"}
        Dim linha3 As String() = {"1988", "7", "Where Is My Mind?", "Pixies", "Surfer Rosa"}
        Dim linha4 As String() = {"10/5/1981", "9", "Can't Find My Mind", "Cramps", "Psychedelic Jungle"}
        Dim linha5 As String() = {"10/06/2003", "13", "Scatterbrain. (As Dead As Leaves.)", "Radiohead", "Hail to the Thief"}
        Dim linha6 As String() = {"1960", "3", "O amor , o sorriso e a flor", "João Gilberto", ""}
        Dim linha7 As String() = {"1966", "1", "A ", "Chico Buarque", "Chico Buarque"}
        Dim linha8 As String() = {"1968", "2", "Balada do Louco", "Os Mutantes", "Os Mutantes"}

        With Me.dgvMusicas.Rows
            .Add(linha0)
            .Add(linha1)
            .Add(linha2)
            .Add(linha3)
            .Add(linha4)
            .Add(linha5)
            .Add(linha6)
            .Add(linha7)
            .Add(linha8)
        End With

      'note que estamos alterando a orde de exibição das colunas o datagridview
        With Me.dgvMusicas
            .Columns(0).DisplayIndex = 3
            .Columns(1).DisplayIndex = 4
            .Columns(2).DisplayIndex = 0
            .Columns(3).DisplayIndex = 1
            .Columns(4).DisplayIndex = 2
        End With

    End Sub

5 – Incluindo novas linhas no controle DataGridView

Para incluir novas linhas no controle usando o evento Click do botão de comando btnIncluirNovaLinha, usamos o método Rows.Add() para incluir uma nova linha:

Private Sub btnIncluirNovaLinha_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnIncluirNovaLinha.Click
        Me.dgvMusicas.Rows.Add()
    End Sub

6 – Deletando linhas do controle DataGridView

Para deletar uma linha, usamos o evento Click do botão de comando btnDeletarLinha onde verificamos e existem informações no controle, e se o índice da linha selecionando não é igual a quantidade de linhas existentes, para a seguir usar o método RemoveAt e excluir a linha com o índice selecionado:

Private Sub btnDeletarLinha_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDeletarLinha.Click

        If Me.dgvMusicas.SelectedRows.Count > 0 AndAlso
        Not Me.dgvMusicas.SelectedRows(0).Index = Me.dgvMusicas.Rows.Count - 1 Then
            Me.dgvMusicas.Rows.RemoveAt(Me.dgvMusicas.SelectedRows(0).Index)
        End If

End Sub

7 – Chamando os métodos no evento Load do formulário

Agora, basta chamar os métodos definidos no evento Load do formulário conforme o código a seguir:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Me.Text = "Usando o DataGridView no modo Não Vinculado"
        Me.BackColor = Color.SandyBrown
        DefinirLeiaute()
        ConfiguraDataGridView()
        PopularDataGrid()

End Sub

Executando o projeto neste momento, iremos o obter o seguinte resultado:

vbn_2

Você pode incrementar o exemplo definindo outros recursos, como validações, formatações etc.

Como exemplo, abaixo estamos usando o evento CellFormating para validar a coluna Lançamento, de forma que, se o usuário editar essa coluna, deverá entrar a data no formato ToShortDateString() ( dd/MM/yyyy) ou obterá uma mensagem de erro:

Private Sub dgvMusicas_CellFormatting(ByVal sender As Object,
    ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgvMusicas.CellFormatting

        If e IsNot Nothing Then

            If Me.dgvMusicas.Columns(e.ColumnIndex).Name = "Lançamento" Then
                If e.Value IsNot Nothing Then
                    Try
                        e.Value = DateTime.Parse(e.Value.ToString()).ToShortDateString()
                        e.FormattingApplied = True
                    Catch ex As FormatException
                        MessageBox.Show("{0} não é uma data válida.", e.Value.ToString())
                    End Try
                End If
            End If
        End If
End Sub

Abaixo, vemos uma simulação para uma entrada de data no formato incorreto que será validado pelo código acima:

vbn_3

Assim, você pode usar o DataGridView no modo não vinculado e personalizando o seu comportamento e suas propriedades.

Pegue o projeto completo aqui: DataGridView_UnBound.zip.