terça-feira, 27 de setembro de 2011

Sistema de Contato em Três Camadas C# - Parte III de III

Camada de Apresentação

Renomeie o formulário form1.cs para frmContato.cs
Na propriedade do formulário modifique os seguintes:
Nome
Valor
O que é?
Name
frmContato
Nome do Formulário
BackColor
White
Plano de Fundo
Icon
Escolha o ícone com extensão .icon
Ícone
Size
509; 733
Tamanho do Formulário
StartPosition
CenterScreen
Posição inicia
Text
Contatos
Titulo




No topo do formulario, adicione o componente Panel, uma PictureBox e uma label, conforme a imagem a seguir:


Adicione uma groupBox e os componentes a seguir conforme a imagem: utilize label, textbox e uma maskTextBox.




os nomes dos controles são:
textBox1 = txtCodigo
textBox2 = txtNome
textBox3 = txtEndereco
maskedTextBox1 = mkTelefone

Adicione outra groupbox e os controles a seguir conforme a imagem:


button1 = btnNovo
button2 = btnSalvar
button3 = btnAtualizar
button4 = btnExcluir

Adicione outra groupbox com os controles a seguir

combobox1 = cbmFiltro
maskedTextBox1 = mkPesquisar.
Na propriedade Items adicione os seguintes textos:
Código
Nome
Telefone
e no botão pesquisar = btnPesquisar
Adicione a ultima groupbox e dentro dela insira uma DataGridView. Recendo o nome dgvContato


vá para o código do formulário (F7)
insira o código a seguir:
Chamar a classe RegraNegocio
RegraNegocio negocio = new RegraNegocio();

Habilitar os controles
  private void habilitarControles()
        {
            txtNome.Enabled = true;
            txtEndereco.Enabled = true;
            mkTelefone.Enabled = true;
        }


Limpar os Campos
 
  private void LimparCampo()
        {
            foreach (Control cont in this.Controls)
            {
                if (cont is GroupBox)
                {
                    for (int i = 0; i < cont.Controls.Count; i++)
                    {
                        if (cont.Controls[i] is TextBox)
                            (cont.Controls[i] as TextBox).Text = "";
                        if (cont.Controls[i] is ComboBox)
                            (cont.Controls[i] as ComboBox).SelectedIndex = -1;
                        if (cont.Controls[i] is MaskedTextBox)
                            (cont.Controls[i] as MaskedTextBox).Text = "";
                    }
                }
            }
        }
No evento load do formulário insira o código a seguir
  private void frmContato_Load(object sender, EventArgs e)
        {
            btnNovo.Enabled = true;
            negocio.PreencherDataGrid(dgvContato);
        }
Clique no botão novo e insira o código a seguir:
    private void btnNovo_Click(object sender, EventArgs e)
        {
          
            habilitarControles();
            btnNovo.Enabled = false;
            btnAtualizar.Enabled = false;
            btnExcluir.Enabled = false;
            if (txtNome.Text != null)
            {
                txtNome.Focus();
                btnSalvar.Enabled = true;
            }
            LimparCampo();
        }
Clique no botão Salvar e insira o código a seguir:
private void btnSalvar_Click(object sender, EventArgs e)
        {
          
            if (txtNome.Text != "")
            {
                RegraNegocio cln = new RegraNegocio();
                cln.Nome = this.txtNome.Text;
                cln.Endereco = this.txtEndereco.Text;
                cln.Telefone = this.mkTelefone.Text;
                cln.InserirContato();
                negocio.PreencherDataGrid(dgvContato);
                btnSalvar.Enabled = false;
                btnAtualizar.Enabled = true;
                btnExcluir.Enabled = true;
                MessageBox.Show("Contato cadastrado com sucesso",
                    "Sucesso",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
            }
            else
            {
                txtNome.Focus();
                btnNovo.Enabled = false;
                MessageBox.Show("Adicione um nome de Usuário",
                    "Atenção",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
            }
        }
Clique no botão Atualizar e insira o código a seguir:
        private void btnAtualizar_Click(object sender, EventArgs e)
        {
         
            try
            {
                if (txtCodigo.Text != null)
                {
                    negocio.Codigo = int.Parse(txtCodigo.Text);
                    negocio.Nome = txtNome.Text;
                    negocio.Endereco = txtEndereco.Text;
                    negocio.Telefone = mkTelefone.Text;
                    negocio.AtualizarContato();
                    negocio.PreencherDataGrid(dgvContato);
                    MessageBox.Show("Atualizado com sucesso",
                        "Sucesso",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("O Campo código é obrigatório",
                        "Atenção",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Não foi possível atualizar os dados pelo seguinte motivo: " + ex.Message);
            }
       
Clique no botão excluir e insira o código a seguir:
private void btnExcluir_Click(object sender, EventArgs e)
        {
           
            try
            {
                if (txtCodigo.Text != null)
                {
                    negocio.Codigo = int.Parse(txtCodigo.Text);
                    negocio.ExcluirContato();
                    LimparCampo();
                    negocio.PreencherDataGrid(dgvContato);
                    btnExcluir.Enabled = false;
                    btnAtualizar.Enabled = false;
                    MessageBox.Show("Excluido com sucesso",
                        "Sucesso",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("O Campo Código é obrigatório",
                        "Atenção",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Não foi possível excluir os dados pelo seguinte motivo: " + ex.Message);
            }
        }        
Clique no botão pesquisar e insira o código a seguir:
private void btnPesquisar_Click(object sender, EventArgs e)
        {
            if (cbbFiltro.Text == "Código")
            {
                negocio.Codigo = int.Parse(mkPesquisar.Text);
                negocio.ConsultarCodigo(dgvContato);
            }
            if (cbbFiltro.Text == "Nome")
            {
                negocio.Nome = mkPesquisar.Text;
                negocio.ConsultarNome(dgvContato);
            }
            if (cbbFiltro.Text == "Telefone")
            {
                negocio.Telefone = mkPesquisar.Text;
                negocio.ConsultarTelefone(dgvContato);
            }
            if (cbbFiltro.Text == "")
            {
                negocio.PreencherDataGrid(dgvContato);
            }
        }
Clique duas vezes na ComboBox do Filtro de pesquisa e insira o código a seguir:
        private void cbbFiltro_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbbFiltro.Text == "Telefone")
            {
                mkPesquisar.Mask = "(00)0000-0000";
            }
            else
            {
                mkPesquisar.Clear();
                mkPesquisar.Mask = "";
            }
        }
No evento da DataGridView (no raio) Click insira o código a seguir:
   private void dgvContato_Click(object sender, EventArgs e)
        {
            habilitarControles();
            btnAtualizar.Enabled = true;
            btnExcluir.Enabled = true;
            txtCodigo.Text = dgvContato.CurrentRow.Cells[0].Value.ToString();
            txtNome.Text = dgvContato.CurrentRow.Cells[1].Value.ToString();
            txtEndereco.Text = dgvContato.CurrentRow.Cells[2].Value.ToString();
            mkTelefone.Text = dgvContato.CurrentRow.Cells[3].Value.ToString();
        }

Conclusão

O Conceito de três camadas veio com o objetivo de separar a lógica de negocio da lógica de apresentação e acesso a dados. Com isto o sistema torna-se mais fácil a manutenção e inserção de funções. Este é o primeiro tutorial em três camadas do blog nstutoriais.blogspot.com, e vamos fazer muito mais. Caso tenha alguma dúvida acesse o blog ou adicione no MSN: natanaelsantosdf@hotmail.com ou na nossa página do facebook.  
Tutorial em PDF = Clique aqui Código Fonte do arquivo = Clique aqui
Parte I = Clique aqui
Parte II = Clique aqui
Parte III = Clique aqui

11 comentários:

  1. Caro Natanael,

    Esse é o exemplo mais simples e prático que já vi até hoje sobre aplicação em 3 camadas. Parabens pela simplicidade e clareza do artigo. Valeu !!!

    ResponderExcluir
  2. Obrigado. Estamos preparando mais.

    ResponderExcluir
  3. Exemplo muito prático, aguardo mais sobre 3 camadas.

    ResponderExcluir
  4. Ola Nataniel sou de Angola um grande admirador seu pois muitas da tuas materias me tem ajudado imenso nos meus projectos de Tecnica e Lingagem de Programação.
    desejo-lhe muita sorte e preciso de ajuda sua para aprender a construir os meu botoes de INSERIR,SALVAR, DELETAR E UPDATE em c# numa conexao com SQL Server Management Studio RS

    ResponderExcluir
  5. Gostei. Simples, direito e com conteúdo abrangente e útil.

    ResponderExcluir
  6. Natanael, estou devorando cada parte deste seu site, parabéns!
    Obrigado pelos ensinamentos, assim você vai cada vez mais longe!

    ResponderExcluir
  7. Natanael, eu postei na página 1 desse tutorial a respeito de não conseguir chamar a outra classe, porém era erro bobo meu.
    Agora me vem uma outra dúvida. No tutorial que você disponibilizou em PDF aí, com o link para o 4shared, se encontra um script para colocar no Sql:

    "USE [master]
    GO
    /****** Object: Database [bdcontato] Script Date: 09/24/2011 02:33:14 ******/
    CREATE DATABASE [bdcontato] ON PRIMARY
    ( NAME = N'bdcontato', FILENAME = N'c:\Arquivos de programas\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\bdcontato.mdf' , SIZE = 2304KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
    LOG ON
    ( NAME = N'bdcontato_log', FILENAME = N'c:\Arquivos de programas\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\bdcontato_log.LDF' , SIZE = 576KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    GO
    ALTER DATABASE [bdcontato] SET COMPATIBILITY_LEVEL = 100
    GO
    IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
    begin
    EXEC [bdcontato].[dbo].[sp_fulltext_database] @action = 'enable'
    end
    GO"

    E assim por diante.

    Minha dúvida é a seguinte: para que serve esse script? Sem ele seria possível o acesso do formulário ao bd ?

    Outra dúvida. Nesse tutorial, você coloca o campo cadastrar e pesquisa do cliente em um formulário só. Com o mesmo código que você passou, eu poderia estar separando o cadastro da pesquisa em dois formulários?

    Desde já, muito obrigado pelos tutoriais, e a iniciativa de ajudar pessoas que assim como eu, estamos aprendendo a ferramenta agora.

    Abraço!

    ResponderExcluir
  8. Onde é que está descrito o metodo PreencherDataGrid?

    ResponderExcluir
  9. Olá Natanael
    Parabéns pelo ótimo tutorial.
    Queria baixar o pdf mas o link não funciona

    ResponderExcluir