C# - Gerenciamento de banco de dados MySQL - III


Continuando o meu artigo -  C# - Gerenciamento de banco de dados MySQL - I  - vou mostrar a definição da camada de apresentação - UI - da nossa aplicação através da criação de uma aplicação Windows Forms e assim encerrar esta série de artigos.

Estamos usando uma arquitetura em 3 camadas definida assim:

A nossa camada de interface será uma aplicação Windows Forms que possui um formulário onde através de um componente TabControl podemos obter uma visão com detalhes do produto e outra visão da relação dos produtos cadastrados conforme as figuras a seguir:

Para criar esta interface inclua o controle TabControl a partir da ToolBox e na sua propriedade TabPages clique no botão ao lado de Collection e defina duas TabPages definindo a propriedade nome da primeira- TabPage1- como sendo igual a Cadastro e da segunda - TabPage2- como Lista:

Inclua o controle TabControl e defina a sua propriedade
Appearence como igual a FlatButtons;

Na TabPage Cadastro inclua os seguintes controles a
partir da ToolBox:

- 3 Label
- 3 TextBox - txtID , txtNome e txtPreco
- 4 Button - btnNovo, btnAlterar, btnExcluir, btnExibir e btnProcurar

Na TabPge Lista inclua o componente DataGridView -
gdvProdutos

 

Com isso temos a nossa interface pronta para ser usada. Fazemos isso acessando os dados da base MySQL  e fazendo uma chamada a nossa camada de negócio (BLL) que por sua vez chama a camada de acesso a dados(DAL) que é responsável por recuperar e persistir informação na base de dados.

Vamos usar os eventos dos controles de formulário Button para fazer a chamada a nossa classe de negócio. Para isso no início do nosso formulário devemos ter as seguintes referências:

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Windows.Forms;

using BLL;

using DTO;

Note que temos que ter uma referência a camada de negócios BLL a nossa camada DTO - Data Transfer Object, onde definimos a classe Produto.

Vamos começar com o evento Click do botão Exibir que irá exibir os dados na TabPage Lista em um DataGridView;



void BtnExibirClick(object sender, EventArgs e)

{
try
{
        BLL.
produtoBLL bll = new produtoBLL();
        gdvProdutos.DataSource = bll.selecionaProdutos();
     }
catch (Exception ex){
         MessageBox
.Show(" Erro : " + ex.Message.ToString());
   }
}

Neste código criamos uma instância da classe ProdutoBLL() e em seguida usamos o método selecionaProdutos() que irá retornar um DataTable e exibir os produtos no DataGridView.

Vejamos agora o código do evento Click do botão Novo :

void BtnNovoClick(object sender, EventArgs e)

{

    Produto p = new Produto();

    p.Nome = (String) txtNome.Text;

    p.Preco = Convert.ToDecimal(txtPreco.Text);

    try{

            BLL.produtoBLL bll = new produtoBLL();

            bll.novoProduto(p);

    }

    catch (Exception ex)
    {

        MessageBox.Show(" Erro : " + ex.Message.ToString());

    }

}

 

Primeiro criamos uma instância da classe Produto e definimos as propriedades Nome e Preco atribuindo a elas os valores fornecidos pelo usuário através das caixas de texto txtNome e txtPreco. Não precisamos informar o código do produto(ID) pois o mesmo é controlado pelo SGBD visto que definimos este campo como do tipo identity.

A seguir criamos uma instância da classe ProdutoBLL()  no namespace BLL e em seguida usamos o método novoProduto(p) para incluir um novo produto na base de dados. Observe que passamos como parâmetro um objeto produto e não valores escalares.

 A seguir temos o código associado ao evento Click do botão Alterar:

void BtnAlterarClick(object sender, EventArgs e)

{

    Produto p = new Produto();

    p.ID = Convert.ToInt32(txtID.Text);

    p.Nome = (String) txtNome.Text;

    p.Preco = Convert.ToDecimal(txtPreco.Text);


try
{

     BLL.produtoBLL bll = new produtoBLL();

      bll.alteraProduto(p);

}

catch (Exception ex)
{

    MessageBox.Show(" Erro : " + ex.Message.ToString());

}

}



Primeiro criamos uma instância da classe Produto e definimos as propriedades ID, Nome e Preco atribuindo a elas os valores fornecidos pelo usuário através das caixas de texto txtID, txtNome e txtPreco. Aqui precisamos informar o ID do produto para identificar o produto a ser alterado.

A seguir criamos uma instância da classe ProdutoBLL()  no namespace BLL e em seguida usamos o método alteraProduto(p) para alterar um produto na base de dados. Observe que passamos como parâmetro um objeto produto e não valores escalares.

Vejamos agora o código do evento Click do botão Excluir:



void BtnExcluirClick(object sender, EventArgs e)

{
   Produto
p = new Produto();
   p.ID =
Convert.ToInt32(txtID.Text);
try
{
        BLL.
produtoBLL bll = new produtoBLL();
        bll.excluiProduto(p);
    }

   catch
(Exception ex)
   {

     MessageBox
.Show(" Erro : " + ex.Message.ToString());
}
}

 Primeiro criamos uma instância da classe Produto e definimos a propriedade ID atribuindo a ela o valor fornecido pelo usuário através das caixas de texto txtID.

A seguir criamos uma instância da classe ProdutoBLL()  no namespace BLL e em seguida usamos o método excluiProduto(p) para excluir um produto na base de dados identificado pelo parâmetro ID informado.

Finalmente temos o código do botão Procurar:

void BtnProcurarClick(object sender, EventArgs e)

{

    int id = Convert.ToInt32(txtID.Text);

    Produto p = new Produto();

try{

     BLL.produtoBLL bll = new produtoBLL();

     p = bll.listaProdutoPorID(id);

     txtNome.Text = p.Nome;

     txtPreco.Text = p.Preco.ToString();

}

catch (Exception ex)
{

    MessageBox.Show(" Erro : " + ex.Message.ToString());

}

}

 

Neste código obtemos o código do produto (ID) a partir da caixa de texto txtID.Text. A seguir criamos uma instância da classe Produto() e invocamos o método listaProdutoPorID usando o id obtido; por fim exibimos os dados do produto no formulário.

 Com isso encerramos a nossa aplicação que acessa o MySQL usando uma arquitetura em camadas. Aplicamos os conceitos básicos da orientação a objetos mas podemos ir além, pois usamos na camada DTO uma classe anêmica sem nenhuma inteligência e não usamos o conceito de interface neste projeto. Deixo isso para você como um exercício.

Eu sei é apenas Visual C# e MySQL, mas eu gosto...

Obs: A vídeo aula completa desta séria de artigos esta  no Super DVD Vídeo Aulas.

Referências:


José Carlos Macoratti