Neste artigo vamos continuar o nosso exemplo anterior, criando a camada de apresentação e implementando suas funcionalidades. Na última parte desta série, criamos a camada de negócios; agora já podemos iniciar a criação da camada de apresentação (UI).
Neste exemplo vou criar uma aplicação Windows Forms para consumir o repositório criado, realizando as operações de manutenção e consulta de empregados e departamentos.
Selecione o menu FILE e clique em Add -> New Project. Depois escolha a linguagem C# e o template Windows Forms Applicaton; informe o nome WF e clique no botão OK.
Vamos abrir o formulário form1.cs e alterar o sua propriedade Text para ‘Manutenção de Dados’ e sua cor de fundo para Azul. A seguir, vamos incluir os controles abaixo no formulário a partir da ToolBox:
- 1 Controle TabControl com 3 TabPages: departamentos, funcionários e consultas:
- Na TabPage Departamentos vamos incluir os seguintes controles:
- 1 DataGridView – dgvDepartamentos
- 3 Labels
- 2 TextBox – txtCodigoDepartamento e txtNomeDepartamento
- 6 Button – btnLocalizarDepartamento, btnIncluirDepartamento, btnExcluirDepartamento, tnAlterarDepartamento, btnLimparDepartamento e bnCarregarDepartamentos
- Na TabPage Funcionarios vamos incluir os seguintes controles:
- 1 DataGridView – dgvFuncionario
- 6 Labels
- 4 TextBox – txtCodigoFunci, txtNomeFunci, txtSobreNome, txtEmail
- 1 Combobox – cboDepartamentoFunci
- 6 Button – btnLocalizarFunci, btnIncluirFunci, btnExcluirFunci, btnAlterarFunci, btnLimparFunci e btnCarregarFuncis
- Na TabPage Consultas vamos incluir os seguintes controles:
- 1 Combobox – cboDepartamentos
- 1 Button – btnProcessar
- 1 DataGridView – dgvFunciDepartamento
Antes de prosseguir, vamos incluir referências aos projetos BLL e Model no projeto WF.
Selecione o projeto WF e no menu PROJECT clique em Add Reference. A seguir, clique na guia Solution e marque as opções BLL e Model e clique no botão OK.
Dessa forma, já temos os controles dispostos no formulário e as referências aos demais projetos definidas. Vamos iniciar, então, com o código para manutenção de departamentos que irá realizar consultas e as operações CRUD usando a entidade Departamento.
Vamos começar definindo os namespaces usados no formulário:
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using BLL; using Model;
A seguir, logo após à declaração da classe do formulário, vamos declarar duas variáveis que referenciam as classes DepartamentoBLL e EmpregadoBLL, onde estão os métodos que iremos acessar.
DepartamentoBLL departamentoBLL; EmpregadoBLL empregadoBLL;
Agora vamos implementar o código de referente a cada uma das funcionalidades, usando os eventos dos controles do formulário.
No evento Load do formulário, nós vamos definir o código que carrega os controles Combobox com as informações dos departamentos na guia Funcionarios e Consultas:
private void Form1_Load(object sender, EventArgs e) { try { departamentoBLL = new DepartamentoBLL(); List<Departamento> dep = departamentoBLL.Get_DepartamentoInfo(); cboDepartamentoFunci.DataSource = dep.ToList(); cboDepartamentoFunci.ValueMember = "DepartamentoId"; cboDepartamentoFunci.DisplayMember = "Nome"; cboDepartamentos.DataSource = dep.ToList(); cboDepartamentos.ValueMember = "DepartamentoId"; cboDepartamentos.DisplayMember = "Nome"; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Implementação das funcionalidades referente à guia Departamentos
No evento Click, do botão carregar da guia Departamentos, vamos definir o código que irá carregar os departamentos cadastrados, exibindo-os no controle DataGridView – dgvDepartamentos:
private void bnCarregarDepartamentos_Click(object sender, EventArgs e) { departamentoBLL = new DepartamentoBLL(); List<Departamento> dep = departamentoBLL.Get_DepartamentoInfo(); dgvDepartamentos.DataSource = dep.ToList(); formataGridViewDepart(); }
No evento Click, do botão Localizar, temos o código que irá localizar o departamento pelo código, exibindo o nome da caixa de texto txtDepartamento:
private void btnLocalizarDepartamento_Click(object sender, EventArgs e) { departamentoBLL = new DepartamentoBLL(); int codigo = Convert.ToInt32(txtCodigoDepartamento.Text); List<Departamento> dep = departamentoBLL.Get_DepartamentoInfo(codigo); txtNomeDepartamento.Text = dep[0].Nome; }
No evento Click, do botão Incluir, temos o código que inclui um departamento:
private void btnIncluirDepartamento_Click(object sender, EventArgs e) { try { Departamento dep = new Departamento(); departamentoBLL = new DepartamentoBLL(); dep.Nome = txtNomeDepartamento.Text; departamentoBLL.AdicionarDepartamento(dep); MessageBox.Show("Departamento incluído com sucesso !", "Novo", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
No evento Click, do botão Excluir, temos o código que exclui um departamento:
private void btnExcluirDepartamento_Click(object sender, EventArgs e) { try { Departamento dep = new Departamento(); departamentoBLL = new DepartamentoBLL(); int codigo = Convert.ToInt32(txtCodigoDepartamento.Text); dep = departamentoBLL.Localizar(codigo); departamentoBLL.ExcluirDepartamento(dep); MessageBox.Show("Departamento excluído com sucesso !", "Excluir", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
No evento Click, do botão Alterar, temos o código que alterar um departamento:
private void btnAlterarDepartamento_Click(object sender, EventArgs e) { try { Departamento dep = new Departamento(); departamentoBLL = new DepartamentoBLL(); int codigo = Convert.ToInt32(txtCodigoDepartamento.Text); dep = departamentoBLL.Localizar(codigo); dep.Nome = txtNomeDepartamento.Text; departamentoBLL.AlterarDepartamento(dep); MessageBox.Show("Departamento alterado com sucesso !", "Alterar", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
No evento Click, do botão Limpar, temos a chamada à rotina LimparTextBox(), que limpa os controles TextBox do formulário:
private void btnLimpar_Click(object sender, EventArgs e) { LimparTextBox(this); } public void LimparTextBox(Control control) { foreach (Control c in control.Controls) { if (c is TextBox) { ((TextBox)c).Clear(); } if (c.HasChildren) { LimparTextBox(c); } } }
A formatação do datagridview para departamentos é feita pelo método formataGridViewDepart():
private void formataGridViewDepart() { var gdvDepart = dgvDepartamentos; gdvDepart.AutoGenerateColumns = false; gdvDepart.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders; gdvDepart.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; //altera a cor das linhas alternadas no grid gdvDepart.RowsDefaultCellStyle.BackColor = System.Drawing.Color.White; gdvDepart.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.Aquamarine; //altera o nome das colunas gdvDepart.Columns[0].HeaderText = "Cód."; gdvDepart.Columns[1].HeaderText = "Nome"; // gdvDepart.Columns[0].Width = 50; gdvDepart.Columns[1].Width = 150; //esconde a coluna gdvDepart.Columns[2].Visible = false; //seleciona a linha inteira gdvDepart.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //não permite seleção de multiplas linhas gdvDepart.MultiSelect = false; // exibe nulos formatados gdvDepart.DefaultCellStyle.NullValue = " - "; //permite que o texto maior que célula não seja truncado gdvDepart.DefaultCellStyle.WrapMode = DataGridViewTriState.True; }
No evento CellClick, do datagridview dgvDepartamentos, temos o código que obtém os valores da linha selecionada e os exibe nas caixas de texto do formulário:
private void dgvDepartamentos_CellClick(object sender, DataGridViewCellEventArgs e) { if (dgvDepartamentos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null) { txtCodigoDepartamento.Text = dgvDepartamentos.Rows[e.RowIndex].Cells[0].Value.ToString(); txtNomeDepartamento.Text = dgvDepartamentos.Rows[e.RowIndex].Cells[1].Value.ToString(); } }
Dessa forma, já iniciamos a implementação das funcionalidades para a manutenção de departamentos.
Na próxima parte do artigo vamos definir a implementação para a manutenção de funcionários e consultas e concluir o nosso sistema.