C# - Cadastro de Clientes com Entity Framework em Camadas - III
Se você esta chegando agora precisa saber que:
Vamos agora definir a interface e o código necessário para usar os recursos do Entity Framework em camadas e por a aplicação par funcionar.
Definindo a camada de Interface
Resta agora definir a interface no projeto Windows Forms chamado UI através do formulário form1.cs.
A figura abaixo mostra novamente o formulário contendo os controles para TextBox, DataGridView e os botões de comando onde no evento Click definiremos o código para realizar as operações CRUD;
Devemos copiar o arquivo App.Config para o projeto UI para que possamos acessar os recursos do Entity Data Model.
Devemos também definir uma referência no projeto UI ao projeto DAL. Selecione a solução, e em propriedades do projeto escolha Project Dependencies, escolha o projeto UI e marque a opção DAL;
Assim teremos acesso aos métodos criados na camada de acesso a dados.
Vamos agora definir cada uma das operações associadas com respectivo botão de comando usando os eventos dos controles.
Primeiro devemos definir os namespaces que iremos usar no formulário:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAL;
A seguir devemos
declarar as variáveis registro e clientes respectivamente do tipo
Cliente e ClientesDAL:
Cliente registro;
ClientesDAL clientes;
1 - Evento Load do formulário
/// <summary> /// Evento Load do formulário /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { clientes = new ClientesDAL(); registro = new Cliente(); List<Cliente> resultado = clientes.GetAll(); dgvClientes.DataSource = resultado.ToList(); int codigo = Convert.ToInt32(dgvClientes.Rows[0].Cells[0].Value); if (codigo > 0 ) { Cliente cli = clientes.GetRegistroPorCodigo(codigo); preencheControles(cli); } } |
No evento Load criamos uma instância da nossa classe de acesso a dados e do nosso objeto cliente e primeiro preenchemos o controle DataGridView com todos os clientes usando o método GetAll();
A seguir obtemos o código do cliente do Grid e obtemos uma única entidade cliente usando o método GetRegistroPorCodigo() passando o código do cliente;
Para exibir os dados no formulário invocamos a rotina preencheControles(cli) passando a entidade cliente retornada;
2 - A rotina preencheControles:
/// <summary> /// preencheControles do formulário com dados /// </summary> /// <param name="cliente"></param> private void preencheControles(Cliente cliente) { txtID.Text = cliente.id.ToString(); txtNome.Text = cliente.nome; txtEndereco.Text = cliente.endereco; txtCep.Text = cliente.cep; txtCidade.Text = cliente.cidade; txtCelular.Text = cliente.celular; txtTelefone.Text = cliente.telefone; txtEmail.Text = cliente.email; txtContato.Text = cliente.contato; txtObs.Text = cliente.obs; } |
Esta rotina apenas recebe uma entidade e preenche os controles do formulário com as respectivas informações.
3 - Código do evento CellEnter do controle DataGridView:
/// <summary> /// Evento CellEnter /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dgvClientes_CellEnter(object sender, DataGridViewCellEventArgs e) { int codCliente = Convert.ToInt32(dgvClientes.Rows[e.RowIndex].Cells[0].Value); Cliente resultado = clientes.GetRegistroPorCodigo(codCliente); preencheControles(resultado); } |
O evento CellEnter ocorre quando a célula atual sofre alteração ou recebe o foco. Usamos esse evento para obter o código do cliente da linha selecionada do Grid.
Em seguida usamos o método GetRegistroPorCodigo() passando o código obtido no evento e preenchemos os controles do formulário com os dados da entidade obtida via rotina preencheControles.
4 - O código do evento Click do botão Incluir:
/// <summary> /// Evento Click do botão Incluir /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnIncluir_Click(object sender, EventArgs e) { limparControles(this); txtNome.Focus(); btnSalvar.Visible = true; } |
O código limpa os controles chamando a rotina limparControles() , põe o foco no TextBox do Nome do cliente e exibe o botão Salvar.
5 - Código do evento Click do botão Excluir:
/// <summary> /// Excluir registro /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnExcluir_Click(object sender, EventArgs e) { DialogResult resposta = MessageBox.Show("Deseja excluir este registro?", "Excluir", MessageBoxButtons.YesNo); switch (resposta) { case DialogResult.Yes: clientes = new ClientesDAL(); registro = new Cliente(); registro.id = Convert.ToInt32(txtID.Text); if (clientes.DeleteRegistro(registro)) { MessageBox.Show("Registro excluido com sucesso"); } else { MessageBox.Show("Erro ao excluir o registro"); } break; case DialogResult.No: break; } } |
Neste código após o cliente confirmar a exclusão criamos uma instância da nossa classe de acesso a dados e do nosso objeto cliente usamos o método DeleteRegistro() , e pós obtermos o id da entidade passamos a entidade que desejamos remover para o método.
6 - Código do evento Click do botão Atualizar :
/// <summary> /// Botão atualizar /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAtualizar_Click(object sender, EventArgs e) { clientes = new ClientesDAL(); registro = new Cliente(); atualizaRegistro(registro); if (clientes.UpdateRegistro(registro)) { MessageBox.Show("Registro atualizado com sucesso"); } else { MessageBox.Show("Erro ao atualizar o registro"); } } |
Neste código após criarmos uma instância da nossa classe de acesso a dados e do nosso objeto cliente chamamos a rotina atualizaRegistro() para que nossa entidade Cliente seja atualizada com os dados do formulário.
A seguir usamos o método UpdateRegistro passando a entidade já com as informações para atualizar a entidade.
7- Código do evento Click do botão Salvar:
/// <summary> /// Salva os registros /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSalvar_Click(object sender, EventArgs e) { clientes = new ClientesDAL(); registro = new Cliente(); if (validaDados()) { atualizaRegistro(registro); int retorno = clientes.SaveRegistro(registro); if (retorno > 0) { MessageBox.Show("Registro atualizado com sucesso"); } else { MessageBox.Show("Erro ao atualizar o registro"); } } else { MessageBox.Show("Dados Inválidos..."); } btnSalvar.Visible = false; } |
Neste código após criarmos uma instância da nossa classe de acesso a dados e do nosso objeto cliente chamamos a rotina Validados() que irá verificar se os dados informados no formulário são válidos.
Em seguida preenchemos a entidade Cliente com os dados do formulário usando a rotina atualizaRegistro e usamos o método SaveRegistro() para salvar a entidade.
8- Código da rotina atualizaRegistro():
/// <summary> /// atualizaRegistro /// </summary> /// <param name="cliente"></param> private void atualizaRegistro(Cliente cliente) { cliente.nome = txtNome.Text; cliente.endereco = txtEndereco.Text; cliente.cep = txtCep.Text; cliente.cidade = txtCidade.Text; cliente.celular = txtCelular.Text; cliente.telefone = txtTelefone.Text; cliente.email = txtEmail.Text; cliente.contato = txtContato.Text; cliente.obs = txtObs.Text; } |
Neste código atualizamos a entidade com as informações do formulário.
9 - Código da rotina validaDados e limparControles:
/// <summary> /// validaDados /// </summary> /// <returns></returns> private bool validaDados() { if (txtNome.Text == string.Empty || txtEndereco.Text == String.Empty || txtEmail.Text == string.Empty) { return false; } else { return true; } } /// <summary> /// limparControles /// </summary> /// <param name="control"></param> private void limparControles(Control control) { foreach (Control textBox in control.Controls) { if (textBox is TextBox) { ((TextBox)textBox).Text = string.Empty; } } } |
A rotina validaDados faz uma validação (bem simples por sinal) e retorna true ou false.
A rotina limpar Controles limpa os controles TextBox do formulário.
Executando o projeto iremos obter o seguinte resultado:
Com isso temos nossa aplicação totalmente funcional preparada para realizar as operações CRUD usando o Entity Framework em uma camada de acesso a dados.
Como exercício deixo para você criar a camada de negócios.
O projeto completo com os fontes abertos está no Super DVD .NET.
Eu sei é apenas C#, mas eu gosto...
Referências: