C# - Cadastro de Clientes com Entity Framework em Camadas - III


Se você esta chegando agora precisa saber que:

  1. Na primeira parte deste artigo criamos a solução e os dois projetos e geramos o nosso Entity Data Model (EDM) a partir do nosso modelo de dados.
  2. Na segunda parte definimos os métodos da nossa camada de acesso a dados;

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:

José Carlos Macoratti