VB .NET - Preenchendo controles de formulários a partir de um banco de dados - II


 Neste artigo vou continuar a mostrar como podemos preencher controles de formulários Windows Forms a partir de um banco de dados usando a linguagem VB .NET.

Na primeira parte do artigo tivemos todo o trabalho para lançar os fundamentos da nossa aplicação e usamos uma arquitetura em 3 camadas criando as seguintes camadas:

  1. Camada de Apresentação - UI
  2. Camada de negócios - BLL
  3. Camada de acesso a dados - DAL

Pode parecer insano criar toda essa estrutura para preencher controles de lista mas o trabalho será recompensado pois agora veremos que acessar os dados a partir da camada de apresentação será mais simples e ainda teremos a vantagem de podermos alterar qualquer uma das camadas sem que isso se reflita nas demais camadas.

Vamos abrir a nossa solução Cenario1_AcessAdoNet e vamos ajustar os nomes da solução e do projeto Windows Forms para ficar mais pertinente ao nosso contexto.

Altere o nome da solução para Preencher_ControlesWF e o nome do projeto Cenario1_AcessAdoNet para UI. Ao final teremos na janela Solution Explorer a nossa solução e projetos agora exibidos da seguinte forma:

Agora vamos continuar com as nossas tarefas...

Preenchendo controles de lista

Vamos agora preencher controles de lista como um Combobox e um ListBox com os dados das tabelas do banco de dados Northwind.mdb.

Vamos incluir um novo formulário no projeto Windows Forms. No menu PROJECT clique em Add Windows Forms e aceite o nome padrão para o formulário Form2.vb e clique em ok.

A partir da ToolBox vamos incluir no formulário form2.vb os seguintes controles:

Defina os controles no formulário conforme o leiaute abaixo:

Nosso objetivo é preencher o controle ListBox com os dados da tabela Products exibindo o nome do produto no controle e preencher o controle combobox com os dados da tabela Customers exibindo o nome do cliente.

Para podermos acessar as informações dos produtos teremos que criar uma classe para representar um produto na camada de negócios - BLL - chamada Product.vb. No menu PROJECT clique em Add Class, informe o nome Product.vb e digite o seguinte abaixo nesta classe:

Public Class Product
    Public Property ProductID As String
    Public Property ProductName As String
    Public Property SupplierID As Integer
    Public Property CategoryID As Integer
    Public Property QuantityPerUnit As String
    Public Property UnitPrice As Decimal
    Public Property UnitsInStock As Integer
    Public Property UnitsOnOrder As Integer
    Public Property RecordLevel As Integer
    Public Property Discontinued As Boolean
End Class

Vamos precisar também criar uma classe chamada ProductBLL com métodos parecidos com o da classe CustomerBLL mas acessando os dados da tabela Products.

No menu PROJECT clique em Add Class, informe o nome ProductBLL.vb e digite o seguinte abaixo nesta classe:

Imports DAL
Public Class ProductBLL
    Public Function GetProductId(id As String) As Product
        Try
            Dim sql As String = "SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, 
UnistsInStock, UnitsOnOrder, ReorderLevel, Discontinued FROM Products WHERE ProductID = '" & id & "'"
            Dim tabela As New DataTable
            tabela = AcessoDB.GetDataTable(sql)
            Return GetProduct(tabela)
        Catch ex As Exception
            Throw ex
        End Try
    End Function
    Public Function GetProduct(ByVal tabela As DataTable) As Product
        Try
            Dim _product As New Product
            If tabela.Rows.Count > 0 Then
                _product.ProductID = tabela.Rows(0).Item(0)
                _product.ProductName = tabela.Rows(0).Item(1)
                _product.SupplierID = tabela.Rows(0).Item(2)
                _product.CategoryID = tabela.Rows(0).Item(3)
                _product.QuantityPerUnit = tabela.Rows(0).Item(4)
                _product.UnitPrice = tabela.Rows(0).Item(5)
                _product.UnitsInStock = tabela.Rows(0).Item(6)
                _product.UnitsOnOrder = tabela.Rows(0).Item(7)
                _product.RecordLevel = tabela.Rows(0).Item(8)
                _product.Discontinued = tabela.Rows(0).Item(9)
                Return _product
            Else
                _product = Nothing
                Return _product
            End If
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function GetListaProduct() As List(Of Product)
        Try
            Dim listaProduct As New List(Of Product)
            Dim i As Integer = 0
            Dim tabela = AcessoDB.GetDataTable("Select * from Products")
            Dim registros As Integer = tabela.Rows.Count
            If tabela.Rows.Count > 0 Then
                For Each drRow As DataRow In tabela.Rows
                    Dim _product As New Product
                    _product.ProductID = tabela.Rows(i).Item(0)
                    _product.ProductName = tabela.Rows(i).Item(1)
                    _product.SupplierID = tabela.Rows(i).Item(2)
                    _product.CategoryID = tabela.Rows(i).Item(3)
                    _product.QuantityPerUnit = tabela.Rows(i).Item(4)
                    _product.UnitPrice = tabela.Rows(i).Item(5)
                    _product.UnitsInStock = tabela.Rows(i).Item(6)
                    _product.UnitsOnOrder = tabela.Rows(i).Item(7)
                    _product.RecordLevel = tabela.Rows(i).Item(8)
                    _product.Discontinued = tabela.Rows(i).Item(9)
                    listaProduct.Add(_product)
                    i = i + 1
                    If i = tabela.Rows.Count Then
                        Exit For
                    End If
                Next
                Return listaProduct
            Else
                listaProduct = Nothing
                Return listaProduct
            End If
        Catch ex As Exception
            Throw ex
        End Try
    End Function
End Class

Para preencher os controles de lista temos que retornar uma lista de objetos e para isso usamos o método GetListaProduct() da classe ProductBLL. Vamos ter que incluir o método GetListaCustomers() para fazer a mesma coisa na classe CustomerBLL que criamos no artigo anterior.

Então altere a classe CustomerBLL incluindo o método GetListaCustomer() com o código abaixo:

   Public Function GetListaCustomer() As List(Of Customer)
        Try
            Dim listaCustomer As New List(Of Customer)
            Dim i As Integer = 0
            Dim tabela = AcessoDB.GetDataTable("Select * from Customers")
            Dim registros As Integer = tabela.Rows.Count
            If tabela.Rows.Count > 0 Then
                For Each drRow As DataRow In tabela.Rows
                    Dim _customer As New Customer
                    _customer.CustomerID = tabela.Rows(i).Item(0)
                    _customer.CompanyName = tabela.Rows(i).Item(1)
                    _customer.ContactName = tabela.Rows(i).Item(2)
                    _customer.ContactTitle = tabela.Rows(i).Item(3)
                    _customer.Address = tabela.Rows(i).Item(4)
                    _customer.City = tabela.Rows(i).Item(5)
                    _customer.Region = IIf(IsDBNull(tabela.Rows(i).Item(6)), "Não Informado", tabela.Rows(i).Item(6))
                    _customer.PostalCode = IIf(IsDBNull(tabela.Rows(i).Item(7)), "Não Informado", tabela.Rows(i).Item(7))
                    _customer.Country = tabela.Rows(i).Item(8)
                    _customer.Phone = tabela.Rows(i).Item(9)
                    _customer.Fax = IIf(IsDBNull(tabela.Rows(i).Item(10)), "Não Informado", tabela.Rows(i).Item(10))
                    listaCustomer.Add(_customer)
                    i = i + 1
                    If i = tabela.Rows.Count Then
                        Exit For
                    End If
                Next
                Return listaCustomer
            Else
                listaCustomer = Nothing
                Return listaCustomer
            End If
        Catch ex As Exception
            Throw ex
        End Try
    End Function

Agora vamos incluir o código no evento Click do botão - Preencher Controles - que preenche os controles de lista conforme abaixo:

Imports BLL

Private Sub btnPreencher_Click(sender As Object, e As EventArgs) Handles btnPreencher.Click
       Dim cliente As New CustomerBLL
        Dim produto As New ProductBLL
        cboClientes.DataSource = cliente.GetListaCustomer
        cboClientes.ValueMember = "CustomerID"
        cboClientes.DisplayMember = "ContactName"
        lbProdutos.DataSource = produto.GetListaProduct
        lbProdutos.ValueMember = "ProductID"
        lbProdutos.DisplayMember = "ProductName"
End Sub

Executando o projeto (não esqueça de definir o form2.vb como o formulário que será executado no projeto) teremos:

Aguarde a continuação do artigo onde irei mostrar como preencher outros controles de lista.

Pegue o projeto completo aqui: Cenario1_AccessAdoNet_2.zip

João 3:17 Porque Deus enviou o seu Filho ao mundo, não para que julgasse o mundo, mas para que o mundo fosse salvo por ele.

João 3:18 Quem crê nele não é julgado; mas quem não crê, já está julgado; porquanto não crê no nome do unigênito Filho de Deus.

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 ?

 

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti