VB.NET 2005 - Criando uma aplicação Windows Completa: Locadora de Filmes - Parte 4
Continuando o desenvolvimento do nosso projeto Locadora de Filmes no Visual Basic 2005 Express Edition este artigo irá continuar a mostrar a implementação da interface do usuário. Se você esta chegando agora recomendo leia os artigos :
VB.NET 2005 - Criando uma aplicação completa : Locadora de Filmes I
VB.NET 2005 - Criando uma aplicação completa : Locadora de Filmes II
VB.NET 2005 - Criando uma aplicação completa : Locadora de Filmes III
Neste artigo vou mostrar como implementar a interface com o usuário através dos formulários com a seguintes funcionalidades:
Cadastrar clientes - Clientes.vb
Cadastrar Filmes - Filmes.vb
Cadastrar Categorias - Categorias.vb
Registrar Locação de Filmes - Movimento.vb.
Implementando o formulário para cadastrar Clientes : Clientes.vb
Apenas para você lembrar: já criamos o dataset ClienteDS que representa a tabela Clientes(criada no primeiro artigo) e já criamos o formulário Clientes.vb que herda do formulário FormularioModelo.vb.
Para implementar o formulário para cadastrar clientes vou usar o recurso do assistente do VB 2005. Acompanhe:
1- Na janela DataSource,
expanda o DataSet ClienteDS e a seguir selecione a tabela Cliente 2- Altere a opção de exibição para Details conforme figura ao lado |
3- A segui abra o formulário Clientes.vb e arraste a tabela Clientes da janela DataSource para o formulário. Após os ajustes de tamanho nos campos você deverá obter o formulário conforme a figura a seguir:
Note que o tipo do campo Nascimento usa um controle DateTimePicker.
Pronto ! acabamos de implementar o formulário de cadastramento de clientes usando os novos recursos do VB2005.
Implementando o formulário para cadastrar Filmes : Filmes.vb
A implementação deste formulário é idêntico ao formulário para cadastrar Clientes.
1- Crie o formulário Filmes.vb incluindo um novo formulário no projeto (Add -> New Item) e a seguir , conforme já explicado no segundo artigo , use a identidade visual herdada do formulário modelo FormularioModelo.vb.
2- Na janela DataSource, expanda o DataSet FilmesDS e a seguir selecione a tabela Filmes
2- Altere a opção de exibição para Details
3- Abra o formulário Filmes.vb e arraste a tabela Filmes para o formulário. Após alguns ajustes você deverá obter o resultado exibido na figura abaixo:
Implementando o formulário para cadastrar Categorias : Categorias.vb
Tendo sempre em mente que a aplicação Locadora de Filmes, objeto desta série de artigos, tem o propósito de mostrar os novos recursos do VB2005 para desenvolver aplicações Windows Forms, estou fazendo muitas simplificações e adotando algumas estratégias com objetivo didático que não seriam usadas em um aplicação real de produção.
Vamos criar uma tabela chamada Categorias que irá armazenar os dados das categorias dos filmes.(Veja como fazer isto no primeiro artigo desta série). A tabela deverá possuir os seguintes campos e propriedades:
Campos da tabela Categorias:
|
Agora inclua um novo formulário chamado Categorias.vb no seu projeto herdando do formulário base FormularioModelo.vb.
O próximo passo é criar um novo Data Source para a tabela Categorias recém criada. Clique com o botão direito do mouse na janela Data Sources e selecione Create new Data Source. Na próxima janela selecione DataBase e clique em Next>. Aceite a conexão que já foi criada e clique em Next> . Selecione a tabela Categorias e informe o nome CategoriasDS clicando a seguir em Finish.
Se você seguiu as orientações terá a seguinte visão do seu projeto:
Vamos alterar o modo de visão do Data Source CategoriasDS para Details e arrastá-lo para o formulário Categorias.vb.
Quando fazemos esta operação o Assistente, além de criar os campos no formulário e incluir os objetos : CategoriaBindingSource, CategoriaTableAdpater e CategoriasBindingNavigator, cria também uma barra de navegação que permite, além da navegação pelos registros, realizar as operações CRUD (read, update e delete) na fonte de dados.
Não vamos usar esta barra de navegação, vamos excluí-la do formulário de forma a ficar com o seguinte layout:
Se olharmos, neste momento, o código do formulário iremos ver:
Public Class Categorias
Me.Validate() Me.CategoriaBindingSource.EndEdit() Me.CategoriaTableAdapter.Update(Me.CategoriasDS.Categoria) End
Sub Private Sub Categorias_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: This line of code loads data into the 'CategoriasDS.Categoria' table. You can move, or remove it, as needed. Me.CategoriaTableAdapter.Fill(Me.CategoriasDS.Categoria) End Sub End Class
|
Acima temos o código do botão Salvar da barra de Navegação e o código que carrega todos as categorias na carga do formulário.
Vamos excluir todo este código do formulário e incluir dois botões de comando : Criar e Cancelar, conforme abaixo:
No evento Load do formulário inclua o seguinte código:
Private Sub
Categorias_Load(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles
MyBase.Load Me.CategoriaBindingSource.AddNew() End Sub |
Este código inclui um novo registro no Data Source.
No evento Click do botão Criar insira o código abaixo:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.CategoriaBindingSource.EndEdit() Me.CategoriaTableAdapter.Update(Me.CategoriasDS.Categoria) Else System.Windows.Forms.MessageBox.Show(Me, "Erro") End If Me.Close() End Sub |
Este código atualiza a tabela Categorias incluindo os dados digitados.
Como o campo Codigo da tabela Categorias é Identity com incremento automático de 1 em 1 iremos desabilitar este campo no formulário definindo para controle TextBox - CodigoTextBox a propriedade Enabled=False e TabStop=False.
Além disto vamos validar o campo descrição não permitindo que o mesmo esteja vazio. Para isto inclua o seguinte código no evento Validating do TextBox:
Private Sub DescricaoTextBox_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles DescricaoTextBox.ValidatingIf Me.DescricaoTextBox.Text.Length = 0 Then e.Cancel = True ErrorProvider1.SetError(DescricaoTextBox, "Informe a descrição da categoria.") Else ErrorProvider1.SetError(DescricaoTextBox, Nothing) End If End Sub
|
Para que o código acima funcione corretamente você deve incluir um controle ErrorProvider no seu formulário.
Podemos querer exibir em um Grid todas as categorias cadastradas, para isto vamos criar um formulário chamado TodasCategorias.vb , e, arrastar o data source CategoriasDS no formato GridView para o formulário. O resultado será o exibido na figura abaixo:
Teremos que fazer um ajuste no menu permitindo duas opções para Categorias: Incluir Nova Categoria e Exibir Categorias.
Não esqueça de incluir o código abaixo para exibir os formulários a partir da seleção do usuário via Menu:
Private
Sub
IncluirNovaCategoriaToolStripMenuItem_Click(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles
IncluirNovaCategoriaToolStripMenuItem.Click
My.Forms.Categorias.MdiParent
= Me End Sub Private Sub ExibirCategoriasToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExibirCategoriasToolStripMenuItem.Click My.Forms.TodasCategorias.MdiParent
= Me End Sub |
Implementando o formulário para registrar as locações : Movimento.vb
A implementação do formulário de locação deve registrar as locações efetuadas pelos clientes. No nosso caso o processo de locação funciona da seguinte forma:
Vamos recordar a estrutura da tabela Movimento para ver os dados que devemos registrar:
- O campo CodigoLocacao é um campo
autonumerado (Identity) e por este motivo não iremos gravar nada neste campo
visto que seu valor é incrementado automaticamente Devemos registrar valores nos seguintes campos:
- Os campos Devolucao e Valor serão preenchidos quando da devolução do filme pelo cliente (por este motivo aceitam valores Nulls, pois não iremos gravar nada na locação nestes campos) |
Abra o formulário Movimento.vb e inclua dois controles Labels , dois controles TextBox e quatro botões de comando(Button) conforme a figura abaixo:
O que pretendendo aqui é que quando o for efetuar a locação o funcionário irá informar o código do filme e o código do cliente. Se por algum motivo estes dados não estiverem disponíveis implementamos uma busca nas tabelas Filmes e Clientes que nos retornarão estes valores.
Para implementar este recurso deveremos criar dois novos formulários : SelecionaFilme.vb e SelecionaCliente.vb que atuarão basicamente de forma idêntica : irão exibir uma caixa de texto, onde o usuário informará o nome do filme ou do cliente, um botão selecionar que deverá extrair os dados da respectiva tabela, e exibir o resultado da consulta em um DataGridview. A seguir os passos para implementar o recurso para o formulário SelecionaFilme.vb.
Como queremos exibir somente o filme correspondente ao nome informado pelo funcionário devemos incluir um filtro na nossa fonte de dados - Data Source - FilmesDS.
Na guia Data Source , selecione FilmesDS e clique com o botão direito selecionando - Edit Data Set with Designer
A seguir selecione o Data Set Filmes e clique com o botão direito do mouse selecionando Add -> Query
Na janela - TableAdapter Configuration Wizard - vamos usar uma instrução SQL Select , por isto clique no botão Next>
Como vamos obter linhas de retorno, aceite a seleção do wizard e clique no botão Next > novamente
Na janela a seguir vamos montar a nossa consulta , por isto clique no botão - Query Builder.
Estando na janela Query Builder selecione o campo titulo e na coluna Filter informe o parâmetro : Like @titulo
Podemos retornar ao formulário SelecionaFilme. Ao clicar no botão Seleciona devemos acionar a consulta criada, para isto inclua o seguinte código no evento Click do botão:
Private
Sub Button1_Click(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click Me.FilmesTableAdapter.FillByTitulo(FilmesDS.Filmes, "%" & TextBox1.Text & "%") End Sub |
Obs: Você deve remover qualquer outro código gerado pelo assistente no formulário.
Neste código eu estou usando do TableAdapter e a consulta FillByTitulo para extrair dados do dataset Filmes segundo o valor informado na caixa de texto TextBox1.Text. (eu sugiro que você forneça nomes sugestivos aos controles)
Devemos ainda configurar algumas propriedades do DataGridView pois não desejamos que o usuário altere o DataGridView ou inclua, exclua ou efetue uma seleção múltipla no mesmo. Para isto defina como False as seguintes propriedades : MultiSelect , AllowUserAddRows, AllowUserDeleteRows, AllowUserResizeRows e AllowUserResizeColumns. Vamos definir a propriedade SelecionMode como FullRowSelect para selecionar a linha por inteiro.
Quando o usuário clicar na célula que exibe os dados do título procurado devemos capturar a seleção e os dados do filme escolhido. Fazemos isto tratando o evento Click do botão Aceitar. Abaixo temos o código que deve ser incluído neste evento:
Private
Sub btnAceita_Click(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles
btnAceita.Click codigoFilme =
Me.FilmesDS.Filmes(FilmesBindingSource.Position).CodigoFilme End Sub |
Aqui definimos a variável pública codigoFilme no formulário e obtemos o código do filme pois é este valor que vamos gravar na tabela Movimento.
Agora voltemos ao formulário Movimento.vb , onde tudo começou. Após efetuar a busca e selecionar o filme pelo título deveremos obter o código do filme e exibir na caixa de texto - txtCodigoFilme - do formulário de Locações - Movimento.vb. Para isto basta acrescentar o código abaixo no evento Click do botão Procurar do formulário:
Private
Sub
btnProcuraFilme_Click(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles
btnProcuraFilme.Click
My.Forms.SelecionaFilme.ShowDialog() End Sub |
Nota: Você pode exibir o nome do titulo do filme incluindo um controle Label no formulário e o seguinte código no botão Procurar: lbltituloFilme.Text = My.Forms.SelecionaFilme.tituloFilme
A primeira linha abre o formulário para selecionar o filme e a segunda obtém o valor da variável codigoFilme declarada como Public no formulário SelecionaFilme.
Todo o procedimento acima deverá ser repetido para o formulário SelecionaCliente. Deixo isto como tarefa para você realizar.
O código final do formulário, antes de efetuar o registro da locação, será o seguinte:
Public Class Movimento
txtCodigoFilme.Text = My.Forms.SelecionaFilme.codigoFilme
Private Sub btnProcuraCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcuraCliente.Click
txtCodigoCliente.Text = My.Forms.SelecionaCliente.codigoCliente
|
Nota: Você pode exibir o nome do cliente incluindo um controle Label no formulário e o seguinte código no botão Procurar: lblNomeCliente.Text = My.Forms.SelecionaCliente.nomeCliente
Para efetuar o registro da locação vou criar uma classe que será responsável por esta tarefa. Mas isto é assunto para o próximo artigo.
Aguarde a continuação no artigo : VB.NET 2005 - Criando uma aplicação Windows Completa: Locadora de Filmes - Parte 5
VB.NET 2005 , é fácil, é simples, é legal. Divirta-se...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: