Desenvolvendo uma aplicação Multicamadas em Visual Basic .NET – Parte 2 Camada Intermediária e Apresentação

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (14)  (0)

Continuação do exemplo de uma aplicação para um Disk-Pizza. Tem como objetivo explorar o conceito de programação em multicamadas em VB.NET

st1\:*{behavior:url(#ieooui) }

Desenvolvendo uma aplicação Multicamadas em Visual Basic .NET – Parte 2 Camada Intermediária e Apresentação.

 

Introdução

 

Esse artigo é o segundo de uma série de três (03) artigos que apresentam um exemplo prático e simples abordando o desenvolvimento em camadas em VB.NET, sabemos que a programação orientada a objetos (POO) possibilita uma abordagem simples para a utilização de dados usando objetos.

 

No primeiro artigo apresentamos um cenário para o desenvolvimento da aplicação e criamos o Banco de Dados com as respectivas tabelas e o mapeamento Entidade Relacionamento entre elas. Chamamos o conjunto de dados dentro de um DataSet, que denominamos como sendo nossa camada de dados.

 

Nesse artigo criaremos as classes da camada “2 – Camada Intermediaria” que representam a lógica de negócio (regras de negócio) e a lógica do controlador (classe que faz a interface com os dados).  Essa camada, deve assegurar a confiabilidade dos dados antes que o servidor de Banco de Dados atualize ou exiba as informações ao cliente do aplicativo (camada de apresentação).

 

Sabe-se que de acordo com as necessidades atuais das empresas e alterações constantes na legislação, as classes facilitam a atualização das aplicações bem como permitem o reuso do código.

 

Nossa Camada de Negócios, isola as regras, da interface do sistema. Essa camada funciona como intermediária entre os dados da camada “1 – Camada de Dados” e a camada “3 – Camada de Apresentação” cliente do aplicativo.

 

Iniciaremos também a criação da última camada “3 – Camada de Apresentação”. Onde são apresentados os formulários de clientes e de pesquisa genérica.

 

figge002.gif

Figura 1 - Camadas da Aplicação Exemplo

 

2 – Camada Intermediaria

 

Vamos começar organizando o nosso projeto. Para isso abra o projeto desenvolvido no Artigo “Desenvolvendo uma aplicação Multicamadas em Visual Basic .NET – Parte 1 Camada de Dados”.

 

1)      Adicione uma nova pasta ao projeto, clique com o botão direito do mouse sobre a solução, selecione Add New Folder. Dê o nome para essa pasta de “2 – Camada Intermediaria” (sem acento).

 

figge003.gif

 

2)      Crie uma subpasta na pasta “2 – Camada Intermediaria” chamada “2.1 – Logica Controlador” e outra “2.2 – Logica Negocios” (sem acento).

figge005.gif

Vamos adicionar a nossa primeira classe, que será responsável pelo controle dos dados. Chamaremos essa classe de “clsDados.vb”.

 

3)      Clique com o botão direito sobre “2.1 – Logica Controlador” e selecione Add .. Class .. Dê o nome de “clsDados.vb” para essa classe. Conforme figura.

 

figge007.gif

 

 

4)      Repita o procedimento para a criação das seguintes classes, agora na subpasta “2.2 – Logica Negocios”. Classes essas que comporão a lógica de negócio.Veja a figura.

 

figge009.gif

 

 

 

Depois de organizado o nosso projeto, vamos ao código da Classe de Dados, “clsDados.vb”. Classe genérica que utilizaremos para fazer a interface entre a classe de negócios e a camada de dados. Nela poderemos realizar as operações básicas de banco de dados, como: inclusão, alteração, consulta e exclusão.

 

Revisando: A orientação a objetos usa classes para encapsular variáveis de instância (dados) e métodos (comportamentos).

 

4) Digitar o código abaixo na classe “clsDados.vb”.Dê um duplo clique sobre o nome do arquivo e digite. Se preferir, é claro, copie.

 

Classe - Camada de Dados (Lidar diretamente com os dados)

Imports System.Data

Imports System.Data.SqlClient

 

 

Public Class ClsDados

    Dim strConexao As String = My.Settings.cnPizza

 

    Private Function AbrirBanco() As SqlConnection

        Dim cn As New SqlConnection

        cn.ConnectionString = strConexao

        cn.Open()

        Return cn

    End Function

 

    Private Sub FecharBanco(ByVal cn As SqlConnection)

        If cn.State = ConnectionState.Open Then

            cn.Close()

        End If

    End Sub

 

    Public Sub ExecutarComando(ByVal strQuery As String)

        Dim cn As New SqlConnection()

        Try

            Abrir o banco de dados e passar os

            parametros da consulta SQL, parametros

            e ordem de execução.

            cn = AbrirBanco()

            Dim cmdCommand As New SqlCommand

            With cmdCommand

                .CommandText = strQuery.ToString

                .CommandType = CommandType.Text

                .Connection = cn

                .ExecuteNonQuery()

            End With

 

        Catch ex As Exception

            Throw ex

        Finally

            FecharBanco(cn)

        End Try

    End Sub

 

 

    Public Function RetornarDataSet(ByVal strQuery As String) As DataSet

        Dim cn As New SqlConnection()

        Try

            Abrir o banco de dados e passar os

            parametros da consulta SQL, parametros

            e ordem de execução.

            cn = AbrirBanco()

            Dim cmdCommand As New SqlCommand

            With cmdCommand

                .CommandText = strQuery.ToString

                .CommandType = CommandType.Text

                .Connection = cn

                .ExecuteNonQuery()

            End With

            Declarado um dataadapter e um dataset

            passar o comando para o dtAdapter e

            carregar o dataset com resultado da busca

            Dim dtAdapter As New SqlDataAdapter

            Dim dsDataSet As New DataSet

            With dtAdapter

                .SelectCommand = cmdCommand

                .Fill(dsDataSet)

            End With

            Retorna o Dataset

            Return dsDataSet

        Catch ex As Exception

            Throw ex

        Finally

            FecharBanco(cn)

        End Try

    End Function

 

 

    Public Function RetornarDataReader(ByVal strQuery As String) As SqlDataReader

        Dim cn As New SqlConnection()

        Try

            Abrir o banco de dados e passar os

            parametros da consulta SQL, parametros

            e ordem de execução e retorna DataReader.

            cn = AbrirBanco()

            Dim cmdCommand As New SqlCommand

            With cmdCommand

                .CommandText = strQuery.ToString

                .CommandType = CommandType.Text

                .Connection = cn

            End With

            Return cmdCommand.ExecuteReader

        Catch ex As Exception

            Throw ex

        Finally

            FecharBanco(cn)

        End Try

    End Function

 

    Public Function RetornarIdNumerico(ByVal strQuery As String) As Integer

        Dim cn As New SqlConnection()

        Try

            Abrir o banco de dados e passar os

            parametros da consulta SQL, parametros

            e ordem de execução e retorna um inteiro.

            cn = AbrirBanco()

            Dim cmdCommand As New SqlCommand

            With cmdCommand

                .CommandText = strQuery.ToString

                .CommandType = CommandType.Text

                .Connection = cn

            End With

            Dim dtReader As SqlDataReader

            dtReader = cmdCommand.ExecuteReader()

            Dim codigo As Integer

            If dtReader.Read() Then

                codigo = dtReader(0) + 1

            End If

            Return codigo

        Catch ex As Exception

            Throw ex

        Finally

            FecharBanco(cn)

        End Try

    End Function

 

    Public Function RetornarValorTotal(ByVal strQuery As String) As Decimal

        Dim cn As New SqlConnection()

        Try

            Abrir o banco de dados e passar os

            parametros da consulta SQL, parametros

            e ordem de execução e retorna um inteiro.

            cn = AbrirBanco()

            Dim cmdCommand As New SqlCommand

            With cmdCommand

                .CommandText = strQuery.ToString

                .CommandType = CommandType.Text

                .Connection = cn

            End With

            Dim dtReader As SqlDataReader

            dtReader = cmdCommand.ExecuteReader()

            Dim ValorTotal As Decimal

            If dtReader.Read() Then

                ValorTotal = dtReader(0)

            End If

            Return ValorTotal

        Catch ex As Exception

            Throw ex

        Finally

            FecharBanco(cn)

        End Try

    End Function

 

End Class

 

Vamos agora criar a classe Clientes, definindo os campos membros, atributos/propriedade e métodos. Como boa prática de programação as variáveis de instância da classe estarão definida como PRIVATE, sendo acessíveis apenas aos membros da classe. Utilizaremos métodos de acesso para exibir ou ler os dados.

 

5)      Classe Cliente. “clnClientes.vb”

 

Imports System.Text

Imports System.Data.SqlClient

 

Public Class clnClientes

    Campos membros

    Private mIdCliente As Integer

    Private mNomeRazao As String

    Private mEndereco As String

    Private mBairro As String

    Private mCep As String

    Private mTelefone As String

    Private mCidade As String

    Private mEstado As String

    Private mObservacoes As String

 

    atributos

    Public Property IdCliente() As Integer

        Get

            Return mIdCliente

        End Get

        Set(ByVal value As Integer)

            mIdCliente = value

        End Set

    End Property

 

    Public Property NomeRazao() As String

        Get

            Return mNomeRazao

        End Get

        Set(ByVal value As String)

            mNomeRazao = value

        End Set

    End Property

 

    Public Property Endereco() As String

        Get

            Return mEndereco

        End Get

        Set(ByVal value As String)

            mEndereco = value

        End Set

    End Property

    Public Property Bairro() As String

        Get

            Return mBairro

        End Get

        Set(ByVal value As String)

            mBairro = value

        End Set

    End Property

    Public Property Cep() As String

        Get

            Return mCep

        End Get

        Set(ByVal value As String)

            mCep = value

        End Set

    End Property

    Public Property Telefone() As String

        Get

            Return mTelefone

        End Get

        Set(ByVal value As String)

            mTelefone = value

        End Set

    End Property

    Public Property Cidade() As String

        Get

            Return mCidade

        End Get

        Set(ByVal value As String)

            mCidade = value

        End Set

    End Property

    Public Property Estado() As String

        Get

            Return mEstado

        End Get

        Set(ByVal value As String)

            mEstado = value

        End Set

    End Property

 

    Public Property Observacoes() As String

        Get

            Return mObservacoes

        End Get

        Set(ByVal value As String)

            mObservacoes = value

        End Set

    End Property

 

 

    Métodos da Classe Clientes

    Public Sub Buscar()

        Dim cSql As String

        cSql = "Select * From Clientes Where IdCliente=" & mIdCliente

        Dim ds As DataSet

        Dim DtPizza As New ClsDados()

        ds = DtPizza.RetornarDataSet(cSql)

        If ds.Tables(0).Rows.Count > 0 Then

            IdCliente = ds.Tables(0).Rows(0).Item(0)

            NomeRazao = ds.Tables(0).Rows(0).Item(1)

            Endereco = ds.Tables(0).Rows(0).Item(2)

            Bairro = ds.Tables(0).Rows(0).Item(3)

            Cep = ds.Tables(0).Rows(0).Item(4)

            Telefone = ds.Tables(0).Rows(0).Item(5)

            Cidade = ds.Tables(0).Rows(0).Item(6)

            Estado = ds.Tables(0).Rows(0).Item(7)

            Observacoes = ds.Tables(0).Rows(0).Item(8)

        End If

    End Sub

 

    Public Function BuscarId() As Integer

        Dim cSql As String

        cSql = "Select Top 1 (IdCliente) From Clientes order by IdCliente desc"

        Dim IdBuscado As Integer

        Dim DtPizza As New ClsDados()

        IdBuscado = DtPizza.RetornarIdNumerico(cSql)

        Return IdBuscado

    End Function

 

 

    Public Sub Editar()

        Dim strQuery As New StringBuilder

        strQuery.Append("Update Clientes ")

        strQuery.Append("set ")

        strQuery.Append("IdCliente=")

        strQuery.Append(mIdCliente)

        strQuery.Append(", NomeRazao=")

        strQuery.Append(mNomeRazao)

        strQuery.Append(", Endereco=")

        strQuery.Append(mEndereco)

        strQuery.Append(", Bairro=")

        strQuery.Append(mBairro)

        strQuery.Append(", Cep=")

        strQuery.Append(mCep)

        strQuery.Append(", Cidade=")

        strQuery.Append(mCidade)

        strQuery.Append(", Estado=")

        strQuery.Append(mEstado)

        strQuery.Append(", Observacoes=")

        strQuery.Append(mObservacoes)

        strQuery.Append("")

        strQuery.Append(" where IdCliente=")

        strQuery.Append(mIdCliente & ";")

        Dim BancoPizza As New ClsDados()

        BancoPizza.ExecutarComando(strQuery.ToString)

    End Sub

 

    Public Sub Excluir()

        Dim strQuery As New StringBuilder

        strQuery.Append("Delete From Clientes ")

        strQuery.Append("where IdCliente=")

        strQuery.Append(mIdCliente)

        Dim BancoPizza As New ClsDados()

        BancoPizza.ExecutarComando(strQuery.ToString)

    End Sub

 

    Public Sub Gravar()

        Dim strQuery As New StringBuilder

        strQuery.Append("Insert into Clientes ")

        strQuery.Append(" (")

        strQuery.Append("IdCliente,")

        strQuery.Append("NomeRazao,")

        strQuery.Append("Endereco,")

        strQuery.Append("Bairro,")

        strQuery.Append("Cep,")

        strQuery.Append("telefone,")

        strQuery.Append("Cidade,")

        strQuery.Append("Estado,")

        strQuery.Append("Observacoes")

        strQuery.Append(") ")

        strQuery.Append(" VALUES (")

        strQuery.Append(mIdCliente)

        strQuery.Append(", " & mNomeRazao & "")

        strQuery.Append(", " & mEndereco & "")

        strQuery.Append(", " & mBairro & "")

        strQuery.Append(", " & mCep & "")

        strQuery.Append(", " & mTelefone & "")

        strQuery.Append(", " & mCidade & "")

        strQuery.Append(", " & mEstado & "")

        strQuery.Append(", " & mObservacoes & "")

        strQuery.Append(");")

        Dim BancoPizza As New ClsDados()

        BancoPizza.ExecutarComando(strQuery.ToString)

    End Sub

 

    Public Function Pesquisar(ByVal Campo As String, _

    ByVal Parametro As String, ByVal Valor As String, _

    ByVal tipo As String) As DataSet

        Dim strQuery As New StringBuilder

        strQuery.Append("Select * From Clientes ")

        strQuery.Append("where " & Campo & " ")

        strQuery.Append(Parametro & " ")

        strQuery.Append(Valor)

        Dim a As String = strQuery.ToString()

        Dim ds As DataSet

        Dim BancoPizza As New ClsDados()

        ds = BancoPizza.RetornarDataSet(strQuery.ToString)

        Return ds

    End Function

End Class

 

6)      Como bom exercício para entendimento, você poderá implementar a Classe de Produtos, seguindo como modelo a classe de clientes. Caso queira, anexei essa classe em downloads.

 

7)      Vamos voltar à organização do nosso projeto e criar uma nova pasta para organização do projeto, que conterá os objetos da Terceira e última camada de nossa aplicação, ou seja, a “3 – Camada Apresentacao” sem acento. Veja figura:

 

figge011.gif

 

 

8)      Arraste o Form1.vb e Renomeie-o para FrmClientes.Vb.

 

figge013.gif

 

9)      Crie a interface abaixo, nomeando os controles (TextBox) conforme abaixo:

 

figge015.gif

10)  Defina os nomes dos botões acrescentando o prefixo cmd nos nomes: cmdIncluir, cmdAlterar, cmdExcluir, cmdCancelar e cmdPesquisar.

 

Adicionando um módulo para utilização nesse projeto. Colocaremos nele as rotinas gerais. O Módulo deve estar fora da pasta “3 – Camada de Apresentacao” para uma melhor organização.

 

11)  Clique com o botão direito sobre o nome do projeto e selecione Add.. Module.., dê o nome para esse módulo de: “modGlobal.vb”.

 

figge017.gif

 

12)  Acrescente o código abaixo dentro do módulo criado.

 

    Public Sub Limpar(ByRef f As GroupBox)

        For Each ctl As Control In f.Controls

            If TypeOf ctl Is TextBox Then ctl.Text = ""

            If TypeOf ctl Is ComboBox Then ctl.Text = ""

        Next ctl

    End Sub

 

    Public Sub ParaGravar(ByRef f As GroupBox)

        For Each ctl As Control In f.Controls

            If ctl.Name = "cmdIncluir" Then

                ctl.Enabled = True

            End If

            If ctl.Name = "cmdCancelar" Then

                ctl.Enabled = True

            End If

            If ctl.Name = "cmdAlterar" Then

                ctl.Enabled = False

            End If

            If ctl.Name = "cmdExcluir" Then

                ctl.Enabled = False

            End If

        Next

    End Sub

 

    Public Sub ParaAlterar(ByRef f As GroupBox)

        For Each ctl As Control In f.Controls

            If ctl.Name = "cmdIncluir" Then

                ctl.Enabled = False

            End If

            If ctl.Name = "cmdCancelar" Then

                ctl.Enabled = False

            End If

            If ctl.Name = "cmdAlterar" Then

                ctl.Enabled = True

            End If

            If ctl.Name = "cmdExcluir" Then

                ctl.Enabled = True

            End If

        Next

    End Sub

    Public Sub Liberar(ByRef f As GroupBox)

        For Each ctl As Control In f.Controls

            If ctl.Name = "cmdPesquisar" Then

                ctl.Enabled = True

            Else

                ctl.Enabled = False

            End If

        Next

    End Sub

 

 

Explicação das rotinas do módulo acima. O primeiro procedimento (Limpar), recebe como parâmetro a referência do GroupBox do formulário de envio (por exemplo: Clientes) e limpa todos os controles TextBox dentro do conteiner Groupbox referenciado. O segundo procedimento (ParaGravar) e o terceiro (ParaAlterar) recebe como parâmetro a referência do GroupBox onde se encontram os botões e os trata respectivamente habilitando ou desabilitando o controle conforme o caso. O último (liberar) trata o botão pesquisar.

 

Agora, vamos aos códigos que responderão aos eventos dos usuários. O formulário de clientes deverá funcionar da seguinte maneira: assim que o formulário for carregado o usuário deverá digitar o código do cliente, se existir o cliente, cujo código tenha sido digitado, será exibido os seus dados no formulário e os botões: alterar, excluir e pesquisar, deverão ficar habilitados, incluir e cancelar deverão ficar desabilitado, caso não exista o campo receberá a palavra <AUT> e os botões: incluir, cancelar, pesquisar ficarão habilitados e os demais desabilitados.

 

13)  Código do que responderá ao evento LostFocus do IdClienteTextBox (ao perder o foco):

 

        If IdClienteTextBox.Text.Trim = Nothing Then

            Exit Sub

        End If

        IdClienteTextBox.Enabled = False

        Dim Clientes As New clnClientes

        Clientes.IdCliente = IdClienteTextBox.Text

        Clientes.Buscar()

        If Clientes.NomeRazao <> "" Then

            IdClienteTextBox.Text = Clientes.IdCliente

            NomeRazaoTextBox.Text = Clientes.NomeRazao

            EnderecoTextBox.Text = Clientes.Endereco

            BairroTextBox.Text = Clientes.Bairro

            CepTextBox.Text = Clientes.Cep

            TelefoneTextBox.Text = Clientes.Telefone

            CidadeTextBox.Text = Clientes.Cidade

            EstadoTextBox.Text = Clientes.Estado

            ObservacoesTextBox.Text = Clientes.Observacoes

            ParaAlterar(GroupBox2)

        Else

            IdClienteTextBox.Text = "<AUT>"

            NomeRazaoTextBox.Text = ""

            EnderecoTextBox.Text = ""

            BairroTextBox.Text = ""

            CepTextBox.Text = ""

            TelefoneTextBox.Text = ""

            CidadeTextBox.Text = ""

            EstadoTextBox.Text = ""

            ObservacoesTextBox.Text = ""

            ParaGravar(GroupBox2)

        End If

 

14)  Agora vamos ao código que deverá responder ao evento click do botão Incluir.

 

        Dim incluir As New clnClientes()

        If IdClienteTextBox.Text.Trim = Nothing Then

            MsgBox("Identificação do cliente necessária", 16, "Erro")

            Exit Sub

        End If

        If IdClienteTextBox.Text = "<AUT>" Then busca o último código cadastrado

            Dim busca As New clnClientes()

            incluir.IdCliente = busca.BuscarId()

        End If

        incluir.NomeRazao = NomeRazaoTextBox.Text

        incluir.Endereco = EnderecoTextBox.Text

        incluir.Bairro = BairroTextBox.Text

        incluir.Cep = CepTextBox.Text

        incluir.Telefone = TelefoneTextBox.Text

        incluir.Cidade = CidadeTextBox.Text

        incluir.Estado = EstadoTextBox.Text

        incluir.Observacoes = ObservacoesTextBox.Text

 

        Try

            incluir.Gravar()

        Catch ex As Exception

            MsgBox("Ocorreu o erro: " & ex.Message)

            Limpar(GroupBox1)

            Exit Sub

        End Try

        MsgBox("Cliente Cadastrado com o código:" & incluir.IdCliente, 64, "Sucesso")

        Limpar(GroupBox1)

        Liberar(GroupBox2)

        IdClienteTextBox.Enabled = True

 

15)  Agora vamos ao código que deverá responder ao evento click do botão Alterar.

 

        Dim alterar As New clnClientes()

        If IdClienteTextBox.Text.Trim = Nothing Then

            MsgBox("Identificação do cliente necessária", 16, "Erro")

            Exit Sub

        End If

        alterar.IdCliente = IdClienteTextBox.Text

        alterar.NomeRazao = NomeRazaoTextBox.Text

        alterar.Endereco = EnderecoTextBox.Text

        alterar.Bairro = BairroTextBox.Text

        alterar.Cep = CepTextBox.Text

        alterar.Telefone = TelefoneTextBox.Text

        alterar.Cidade = CidadeTextBox.Text

        alterar.Estado = EstadoTextBox.Text

        alterar.Observacoes = ObservacoesTextBox.Text

        Try

            alterar.Editar()

        Catch ex As Exception

            MsgBox("Ocorreu o erro: " & ex.Message)

            Limpar(GroupBox1)

            Exit Sub

        End Try

        MsgBox("Cadastro Alterado com Sucesso", 64, "Aviso")

        Limpar(GroupBox1)

        Liberar(GroupBox2)

        IdClienteTextBox.Enabled = True

 

16)  Código que responderá ao evento click no botão Excluir.

        Dim Excluir As New clnClientes

        Excluir.IdCliente = IdClienteTextBox.Text

        Excluir.NomeRazao = NomeRazaoTextBox.Text

        Dim ret As Integer

        ret = MsgBox("Deseja excluir: " & _

         Excluir.NomeRazao & " ?", 36, "Atenção")

        If ret = vbYes Then

            Excluir.Excluir()

            MsgBox("Registro Excluído com Sucesso", 64, "Aviso")

        Else

            MsgBox("Operação Cancelada", 64, "Aviso")

        End If

        Limpar(GroupBox1)

        Liberar(GroupBox2)

        IdClienteTextBox.Enabled = True

 

17)  Código que responderá ao evento click no botão Cancelar.

        Limpar(GroupBox1)

        Liberar(GroupBox2)

        IdClienteTextBox.Enabled = True

 

Agora para finalizar esse artigo, adicione na pasta “3 – Camada Apresentacao” um novo Formulário. Dê o nome de FrmConsulta.vb

 

figge019.gif

 

18)  Arraste para o formulário FrmConsulta os seguintes objetos 02 groupboxs, 03 labels, 02 combobox, 01 textbox, 01 button. Conforme figura:

figge021.gif

19)  Altere as propriedades dos objetos do formulário conforme quadro:

Objeto

Propriedade

Valor

ComboBox1

NAME

DROPDOWNSTYLE

cmbCampo

DropDownList

ComboBox2

NAME

DROPDOWNSTYLE

cmbParam

DropDownList

TextBox1

NAME

TxtBusca

Button1

NAME

cmdFiltrar

DataGridView1

NAME

Dgv1

Os controles do tipo GroupBox não precisam alterar a propriedade NAME.

 

20)  Alterne para o formulário FrmClientes e adicione o código que responde ao evento click no botão pesquisar.

 

        FrmConsulta.Text = "Pesquisa dados de Clientes"

        FrmConsulta.Tag = "Clientes" Aqui guardamos o nome da tabela

        FrmConsulta.Show()

 

21)  Alterne agora para o formulário FrmConsulta e adicione o código para o evento Load do formulário “FrmConsulta”.

 

   Dim ds As New DataSet

   Dim Busca As New ClsDados

   ds = Busca.RetornarDataSet("Select * From " & Me.Tag)

   cmbCampo.Items.Clear()

   Dim i As Integer

   For i = 0 To ds.Tables(0).Columns.Count - 1

       cmbCampo.Items.Add(ds.Tables(0).Columns(i).ColumnName.ToString)

   Next i

   Me.Dgv1.AutoGenerateColumns = True

   Me.Dgv1.DataSource = ds.Tables(0)

 

No evento acima (Load do FrmConsulta) realizamos uma busca da tabela (genérica) pois o código servirá para qualquer consulta a tabela. Dentro do laço for, adicionamos a cada passagem no loop o nome de campo ao controle cmbCampo.

 

Agora assim que o usuário escolher o campo para pesquisa, criaremos uma rotina para adicionar os parâmetros possíveis para o tipo de campo selecionado.

 

22)  Defina uma variável local para o todo o formulário FrmConsulta.vb, é só colocá-la após a declaração da classe, como abaixo:

Public Class FrmConsulta

    Dim tipoCampo As System.Type

 

23)  Agora digite o código abaixo para o evento SelectedIndexChanged, do cmbCampo.

 

        Dim ds As New DataSet

        tipoCampo = Me.Dgv1.Columns(cmbCampo.SelectedIndex).ValueType

        If tipoCampo.ToString = "System.Int32" Then

            cmbParam.Items.Clear()

            cmbParam.Items.Add("=")

            cmbParam.Items.Add(">")

            cmbParam.Items.Add(">=")

            cmbParam.Items.Add("<")

            cmbParam.Items.Add("<=")

            cmbParam.Items.Add("<>")

        End If

        If tipoCampo.ToString = "System.String" Then

            cmbParam.Items.Clear()

            cmbParam.Items.Add("=")

            cmbParam.Items.Add("Começa com")

            cmbParam.Items.Add("Termina em")

            cmbParam.Items.Add("Tem a palavra")

        End If

 

Nota sobre o código acima: ele deve ser melhorado para tratar todos os tipos de campos possíveis, eu só tratei os dois tipos que estão definidos na tabela de clientes.

 

24)  Para finalizar o conteúdo desse artigo, vamos ao código que responderá ao evento click do Botão Pesquisar.

 

        Dim campo As String = cmbCampo.Text

        Dim parametro As String = cmbParam.Text

        Dim valor As String = TxtBusca.Text

        Dim tipo As String = tipoCampo.ToString

        Dim ds As New DataSet

 

        Verificar formulário origem pelo TAG do FrmConsulta

        If Me.Tag = "Clientes" Then

            Dim BuscaClientes As New clnClientes

            Ps: Não há a necessidade de fazer

            tratamento para os campos numéricos

            -------------------

            Para tipos String

            If tipo = "System.String" Then

                Verificar formulário origem pelo TAG do FrmConsulta

                If parametro = "Tem a palavra" Then

                    parametro = "Like "

                    valor = "%" & valor & "%"

                End If

                If parametro = "=" Then

                    valor = "" & valor & ""

                End If

                If parametro = "Começa com" Then

                    parametro = "Like "

                    valor = "" & valor & "%"

                End If

                If parametro = "Termina em" Then

                    parametro = "Like "

                    valor = "%" & valor & ""

                End If

            End If

            ds = BuscaClientes.Pesquisar(campo, parametro, valor, tipo)

            Me.Dgv1.AutoGenerateColumns = True

            Me.Dgv1.DataSource = ds.Tables(0)

        End If

 

 

Conclusão:

 

Esse foi o segundo artigo de uma série de três (03) artigos os quais apresentam um exemplo prático e simples abordando o desenvolvimento em camadas em VB.NET, sabemos que a programação orientada a objetos (POO) possibilita uma abordagem simples para a utilização de dados usando objetos.

 

Nesse artigo foram criadas  as classes da camada “2 – Camada Intermediaria”  e iniciada a construção da “3 – Camada de Apresentação”.

 

Gostaria de receber comentários da comunidade devmedia, para que eu possa melhorá-lo. Um abraço e até o próximo artigo.

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?