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


 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 onde 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 que cuja origem não seja um banco de dados. Por exemplo, você pode quere exibir o conteúdo de uma matriz bidimensional ou o conteúdo de um array ou de uma lista de strings, e por ai 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.

Nesse 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;

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 :

Vamos definir também um método Main e definir 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 definimos 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() incluí o controle na coleção de controles do formulário e configura as 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, e, configura 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 e 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 aos 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:

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á validade pelo código acima:

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

(Orou Jesus assim...) "E a vida eterna é esta: que te conheçam, a ti só, por único Deus verdadeiro, e a Jesus Cristo, a quem enviaste."
João 17:3

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti