VB .NET - Curso Prático ADO .NET - Módulo de Administração : Outros detalhes usando o EDM - VI
Na aula anterior abordei a implementação das operações CRUD para o cadastramento de Clientes da CiaFilmes. Dessa forma vimos como acessar, localizar, incluir, alterar e excluir informações do banco de dados CiaFilmes usando o Entity Framework através do Entity Data Model.
A implementação das operações CRUD para os cadastros de atores, diretores, vídeos, categorias, produtores, usuários e papéis segue a mesma lógica e o mesmo procedimento por isso não vou repetir as implementações para os formulários frmAtor.vb, frmCategorias.vb, frmDiretor.vb, frmVideo.vb, frmUsuarios.vb, frmDiretor.vb e frmPapel.vb. Para fazer isso basta repetir os passos mostrados no formulário de clientes alterando apenas a entidade que esta sendo tratada e a sua respectiva tabela.
Nesta aula quero mostrar um outro recurso que não foi abordado no cadastramento de clientes e que pode aparecer em outros cadastramentos.
Vejamos o formulário para cadastrar filmes, conforme mostra a imagem abaixo:
Note que neste formulário temos três controles Combobox: cboDiretor, cboProduto e cboCategoria, para exibir as informações respectivo ID do diretor, do produtor e da categoria.
Quando o formulário for aberto teremos que preencher cada combobox com as informações dos diretores, produtores e categorias de forma que ao selecionar um diretor, um produtor ou uma categoria o ID da seleção seja obtido para depois ser incluído ou alterado.
O que desejamos então é exibir o nome dos diretores, produtores e das categorias e quando a seleção for feita que o ID da seleção seja obtido. Poderíamos exibir apenas o ID de cada item mas dessa forma o usuário teria que lembrar o nome correspondente. Vamos tornar então a experiência do usuário mais fácil incluindo o nome do item e quando da seleção obtendo o seu ID.
Preenchendo o controle Combobox
Vejamos então como implementar o preenchimento do controle Combobox com as informações.
Como queremos carregar os controles na carga do formulário vamos usar o evento Load para declarar 3 rotinas que irão preencher os controles.
No evento Load do formulário defina o código abaixo:
Private Sub frmFilmes_Load(sender As Object, e As EventArgs) Handles MyBase.Load carregaComboDiretor() carregaComboProdutor() carregaComboCategoria() End Sub |
No código apenas declaramos 3 rotinas para preencher o respectivo combobox.
Abaixo vemos o código da rotina carregaComboDiretor() que irá preencher o controle com o nome dos diretores e selecionar o seu ID.
Private Sub carregaComboDiretor() Try Using ctxFilmes = New CiaFilmesEntities cboDiretor.DataSource = (From _diretor In ctxFilmes.Diretores Select _diretor).ToList cboDiretor.DisplayMember = "Nome" cboDiretor.ValueMember = "DiretorId" End Using cboDiretor.SelectedIndex = 0 Catch ex As Exception MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub |
Vou explicar o código passo a passo:
Estou usando um bloco Try/Catch de forma a capturar qualquer exceção que ocorra.
A seguir utilizo o bloco Using/End Using para criar e usar uma instância do nosso contexto - CiaFilmesEntities, gerado pelo Entity Data Model e após isso liberar o recurso usado:
Using ctxFilmes = New
CiaFilmesEntities
cboDiretor.DataSource = (From _diretor In ctxFilmes.Diretores Select _diretor).ToList
cboDiretor.DisplayMember = "Nome"
cboDiretor.ValueMember = "DiretorId"
End Using
Observe que estou usando a seguir 3 propriedades do controle Combobox: DataSource, DisplayMember e ValueMember
No código a fonte de dados esta sendo obtida através de uma consulta LINQ:
(From _diretor In ctxFilmes.Diretores Select _diretor).ToList
Esta consulta seleciona todos os diretores cadastrados na tabela Diretores.
A seguir atribuímos à propriedade DisplayMember o campo Nome que exibirá o nome do diretor e à propriedade ValueMember o campo DiretorId que irá obter o ID do diretor selecionado.
Concluindo definimos o valor da propriedade SelectedIndex como igual a zero para exibir o primeiro item carregado no controle.
A propriedade SelectedIndex representa o índice baseado no valor inicial zero do item atualmente selecionado. (O valor -1 indica que nenhum item esta selecionado.)
Dessa forma o primeiro item possui índice igual a zero.
Aplicamos a mesma lógica para as demais rotinas conforme código a seguir:
1- Combobox comboProdutor
Private Sub carregaComboProdutor() Try Using ctxFilmes = New CiaFilmesEntities cboProdutor.DataSource = (From _produtor In ctxFilmes.Produtores Select _produtor).ToList cboProdutor.DisplayMember = "Nome" cboProdutor.ValueMember = "ProdutorId" End Using cboDiretor.SelectedIndex = 0 Catch ex As Exception MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub |
2- Combobox comboCategoria
Private Sub carregaComboCategoria() Try Using ctxFilmes = New CiaFilmesEntities cboCategoria.DataSource = (From _categoria In ctxFilmes.Categorias Select _categoria).ToList cboCategoria.DisplayMember = "Nome" cboCategoria.ValueMember = "CategoriaId" End Using cboCategoria.SelectedIndex = 0 Catch ex As Exception MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub |
A lógica da implementação vale para qualquer situação onde temos o controle Combobox e desejamos exibir um texto ao usuário e obter o respectivo ID.
Para que isso funcione da forma que foi mostrada a tabela deverá possuir uma chave primária para identificar unicamente cada item e um campo que descreve o respectivo item.
Na próxima aula iremos ver a implementação das consultas dos clientes com mais pedidos , dos filmes mais pedidos e dos pedidos e seus detalhes realizados em um período.
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#