VB.NET 2005 - Criando uma aplicação completa via código III


Neste artigo eu vou mostrar como criar a interface da aplicação que foi definida no artigo  VB.NET 2005 - Criando uma aplicação completa via código I Apenas para lembrar não estou usando os assistentes do VB 2005; estou fazendo tudo via código e usando os controles disponíveis na barra de ferramentas do VB 2005.

Este artigo irá mostrar como você pode usar as storeds procedures criadas no primeiro artigo e as classes de negócio e de dados criadas no segundo artigo. Se você esta chegando agora acompanhe estas tarefas nos artigos a seguir:

  1. VB.NET 2005 - Criando uma aplicação completa via código I
  2. VB.NET 2005 - Criando uma aplicação completa via código II

Para implementar as funcionalidades definidas eu resolvi usar apenas um formulário onde estarei usando um controle TabControl que irá conter os demais controles responsáveis pela implementação da interface com o usuário. Abaixo são exibidas duas imagens do formulário que mostram as duas visões que o usuário irá ter da aplicação.

Na primeira imagem temos a implementação da maioria das funcionalidades da aplicação e na segunda imagem temos a exibição dos dados de todos os alunos.

Abra o projeto e inclua um novo formulário, usando o menu Proejct->Add Windows Forms , chamado frmAlunos.vb e neste formulário inclua um controle TabControl a partir da ToolBox aba Container nomeando como tbcAlunos.

A seguir selecione o controle e na janela de Properties ,na propriedade TabPages, clique em Collection. A janela TabPage Collection Editor irá surgir. Nela vamos dar nome a cada uma das TabPages definindo a propriedade Text, Name conforme abaixo:

Após isto selecione a tabPage tbpAluno e inclua os seguintes controles:  GroupBox, Label, TextBox e Button definindo o leiaute conforme a figura abaixo:

A seguir selecione a tabPage tbpTodos e inclua os seguintes controles : DataGridView (dbvTodos) , conforme a figura abaixo:

Vamos agora ao código que irá usar os recursos já criados até o momento.  Declare a variável alunoInfo como sendo do tipo AlunosDetalhes na primeira linha de código do formulário frmAlunos:

Private alunoInfo As AlunosDetalhes()

Lembre-se que AlunosDetalhes é a classe que foi criada para tratar os alunos possuindo os seguintes membros: aluno, nome, endereco e email.

No evento Load do formulário frmAlunos.vb iremos incluir o seguinte código:

Private Sub frmAlunos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

mostraAlunos()
vinculaControles()
btnSalvar.Enabled =
False

End Sub

Neste código temos as seguintes rotinas:

Vejamos o código da rotina mostraAlunos():

Private Sub mostraAlunos()
 

Dim accBD As New AcessoBD


alunoInfo = accBD.GetTodosAlunos


If
alunoInfo.Length >= 0
Then


      
Dim recPos As Integer = Me.BindingContext(alunoInfo).Position
 

    If Not (alunoInfo Is Nothing) Then

             txtAlunoID.Text = alunoInfo(recPos).AlunoID.ToString

             txtNome.Text = alunoInfo(recPos).Nome

             txtEndereco.Text = alunoInfo(recPos).Endereco

             txtEmail.Text = alunoInfo(recPos).Email

     Else

             tstxt.Text = "Registro não localizado."

     End If

Else

     tstxt.Text = "Não há registros na base de dados."

End If
 

End Sub

A rotina mostraAlunos() cria uma instância da classe AcessoBD e invoca o método GetTodosAlunos desta classe. Isto irá obter todos os alunos via stored procedure procGetTodosAlunos. Os dados serão armazenados na variável objeto alunoinfo que é do tipo AlunosDetalhes. A seguir iremos exibir os dados nas caixas de texto do formulário.

A rotina vinculaControles() apenas faz a vinculação, via DataBinding, dos dados aos controles do formulário:

Private Sub vinculaControles()
 

'vincula os controles TextBox com a fonte de dados

txtAlunoID.DataBindings.Add("Text", alunoInfo, "alunoId")

txtNome.DataBindings.Add("Text", alunoInfo, "Nome")

txtEndereco.DataBindings.Add("Text", alunoInfo, "Endereco")

txtEmail.DataBindings.Add("Text", alunoInfo, "Email")


End
Sub

 

A rotina desvinculaControles() desfaz a vinculação dos dados com os controles de  TextBox do formulário:

Private Sub desvinculaControles()

txtAlunoID.DataBindings.Clear()

txtNome.DataBindings.Clear()

txtEndereco.DataBindings.Clear()

txtEmail.DataBindings.Clear()

End Sub

 

A rotina mostraAluno() obtém os dados de um aluno específico usando como parâmetro o código do Aluno (alunoID). Após criar uma instância da classe AcessoBD, usamos o método GetAluno para obter os dados do aluno com o código(alunoID) informado.

Private Sub mostraAluno(ByVal alunoID As Integer)
 

Dim accBD As New AcessoBD

Dim alunoReg As AlunosDetalhes = accBD.GetAluno(alunoID)


If
Not (alunoReg Is Nothing)
Then

    txtAlunoID.Text = alunoReg.AlunoID.ToString

    txtNome.Text = alunoReg.Nome

    txtEndereco.Text = alunoReg.Endereco

    txtEmail.Text = alunoReg.Email

Else

   tstxt.Text = "Registro não localizado."

End If

End Sub

Para percorrer os registros o usuário clica nos botões de navegação. Abaixo temos o código relacionado ao evento Click de cada um dos botões:

Private Sub btnInicio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInicio.Click

    BindingContext(alunoInfo).Position = 0

End Sub


Private
Sub btnFim_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFim.Click

    BindingContext(alunoInfo).Position = alunoInfo.Length

End Sub


Private Sub btnAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnterior.Click

If BindingContext(alunoInfo).Position = 0 Then

    BindingContext(alunoInfo).Position = alunoInfo.Length

Else

    BindingContext(alunoInfo).Position -= 1

End If

End Sub
 

Private Sub btnProximo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProximo.Click

If BindingContext(alunoInfo).Position = (alunoInfo.Length - 1) Then

    BindingContext(alunoInfo).Position = 0

Else

    BindingContext(alunoInfo).Position += 1

End If

End Sub

A rotina para incluir um novo aluno é dada pelo código abaixo. Se a etiqueta do botão indicar a ação Incluir então os controles TextBox são limpos para que novos dados sejam informados:

Private Sub btnIncluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIncluir.Click


Dim
recPos As Integer = Me.BindingContext(alunoInfo).Position


If
btnIncluir.Text = "Incluir"
Then

   btnIncluir.Text = "Cancela"

   txtAlunoID.Text = ""

   txtNome.Text = ""

   txtEndereco.Text = ""

   txtEmail.Text = ""

   desabilitaBotoes()

   tstxt.Text = "Incluir novo Registro"

Else

   btnIncluir.Text = "Incluir"

   habilitaBotoes()

   tstxt.Text = ""

   desvinculaControles()

   mostraAlunos()

   vinculaControles()

End If

End Sub

O código para salvar os dados é dado a seguir, nele estamos usando o método InsertAluno passando como parâmetro o nome o endereço e o email informados no formulário. O código do aluno é auto-incremental.

Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click


Dim
aluno As AcessoBD = New AcessoBD

Dim alunoReg As AlunosDetalhes = New AlunosDetalhes(0, txtNome.Text, txtEndereco.Text, txtEmail.Text)

habilitaBotoes()


Dim
iAlunoId As Integer = aluno.InsertAluno(alunoReg)

 

If Not (iAlunoId = -1) Then

    tstxt.Text = "Registro salvo com sucesso."

    desvinculaControles()

    mostraAlunos()

    vinculaControles()

   Me.BindingContext(alunoInfo).Position = alunoInfo.Length - 1

Else

   tstxt.Text = "Erro ao salvar o registro."

End If

End Sub

O botão Atualizar efetua a atualização dos dados usando o método UpdateAluno.

Private Sub btnAtualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAtualizar.Click


Dim
aluno As AcessoBD = New AcessoBD

Dim alunoReg As AlunosDetalhes = New AlunosDetalhes(Convert.ToInt32(txtAlunoID.Text), txtNome.Text, txtEndereco.Text, txtEmail.Text)


Dim
iRegAfetados As Integer = aluno.UpdateAluno(alunoReg)
 

If Not (iRegAfetados = 0) Then

    tstxt.Text = "Registro atualizado com sucesso."

Else

   tstxt.Text = "Erro ao atualizar o registro."

End If

End Sub

 

O botão Excluir exclui os dados de um aluno via método DeleteAluno passando como parâmetro o código do aluno.

Private Sub btnExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcluir.Click


If
(MsgBox("Confirma exclusão deste registro ?", MsgBoxStyle.YesNo) = MsgBoxResult.Ok)
Then


  Dim
aluno As AcessoBD = New AcessoBD

  Dim iRegDeletados As Integer = Me.BindingContext(alunoInfo).Position

  Dim iRegAfetados As Integer = aluno.DeleteAluno(Convert.ToInt32(txtAlunoID.Text))


  If
Not (iRegAfetados = 0)
Then

      tstxt.Text = "Registro excluido com sucesso."

          If Not (alunoInfo Is Nothing) Then

           desvinculaControles()

           mostraAlunos()

           vinculaControles()
 

        If iRegDeletados = alunoInfo.Length Then

              Me.BindingContext(alunoInfo).Position = iRegDeletados - 1

        Else

                       Me.BindingContext(alunoInfo).Position = iRegDeletados + 1

       End If 'registros deletados

   Else

        tstxt.Text = "Registro não localizado."

    End If 'alunoInfo é diferente de null

Else

   tstxt.Text = "Erro ao excluir o registro."

End If 'registros afetados

End If 'confirma exclusao

End Sub

As rotinas desabilitaBotoes/habilitaBotoes ativa e/ou desativa os botões de comando.

Private Sub desabilitaBotoes()

   btnSalvar.Enabled = True

   btnAtualizar.Enabled = False

   btnExcluir.Enabled = False

   btnInicio.Enabled = False

   btnProximo.Enabled = False

   btnFim.Enabled = False

   btnAnterior.Enabled = False

End Sub

 

Private Sub habilitaBotoes()

   btnSalvar.Enabled = False

   btnAtualizar.Enabled = True

   btnExcluir.Enabled = True

   btnInicio.Enabled = True

   btnProximo.Enabled = True

   btnFim.Enabled = True

   btnAnterior.Enabled = True

End Sub

 

No código abaixo estamos tratando o evento Click do controle TabControl. Quando o usuário clicar na Aba - Todos os Alunos - teremos o valor para tbcAlunos.SelectedIndex igual a 1 e iremos exibir os dos alunos no DataGridView; caso contrário 

Private Sub tbcAlunos_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbcAlunos.Click


If
tbcAlunos.SelectedIndex = 1
Then

    Dim aluno As AcessoBD = New AcessoBD

    alunoInfo = aluno.GetTodosAlunos


    If
Not (alunoInfo Is Nothing)
Then

        dgvTodos.DataSource = alunoInfo

        tstxt.Text = "Registros (" + alunoInfo.Length.ToString + ")"

      Else

        tstxt.Text = " :: Registros não localizados."

       End If

Else

    tstxt.Text = ""

    desvinculaControles()

    mostraAlunos()

    vinculaControles()

End If

End Sub

Após executar o projeto o resultado obtido é mostrado abaixo:

Com isto temos a conclusão da trilogia dos artigos onde apresentamos a criação de uma aplicação com acesso a dados sem usar os assistentes do Visual Basic 2005.

O código completo da aplicação você encontra no Super CD .Net e no Super DVD .Net.

Até o próximo artigo .NET 


José Carlos Macoratti