C# - CRUD no SQL Server com Dapper e MetroFramework usando um WebService - III
Continuando a primeira parte do artigo vamos consumir o nosso web service em nosso projeto Windows Forms. |
Recursos Usados :
WebService
Consumindo o Web Service : Incluindo a referência ao Web Service
Antes de prosseguir você deve abrir o web service em uma navegador para obter o seu endereço URL.
Agora selecione e abra o projeto CRUD_Dapper e clique com o direito do mouse sobre o projeto e a seguir clique em Add -> Service Reference;
Na janela Add Service Reference copie e cole o endereço de atendimento do web service e clique em Go:
Altere o nome em Namespace para CRUDService e clique no botão OK.
No menu Build clique em Rebuild Solution.
Você deverá visualizar no projeto Windows Forms a referência ao serviço conforme mostra a figura abaixo:
Bora implementar o código para consumir o web service.
Consumindo o Web Service : Implementando o código para consumir o web service
Abra o formulário Form1.cs e defina os seguintes namespaces:
using CRUD_Dapper.CRUDService;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
Note a referência ao namespace CRUDService que a referência ao nosso web service.
1 - Código do evento Load do formulário
private void Form1_Load(object sender, EventArgs e)
{
try
{
FuncionariosServiceSoapClient funci = new FuncionariosServiceSoapClient();
funcionarioBindingSource.DataSource = funci.GetAll();
pContainer.Enabled = false;
Funcionario ofunci = funcionarioBindingSource.Current as Funcionario;
if (ofunci != null)
{
if (!string.IsNullOrEmpty(ofunci.ImagemUrl))
picFoto.Image = Image.FromFile(ofunci.ImagemUrl);
}
}
catch(Exception ex)
{
MetroFramework.MetroMessageBox.Show(this, ex.Message,"Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
A classe FuncionariosServiceSoapClient representa uma instância do nosso serviço permitindo o acesso aos métodos definidos no mesmo. No código chamamos o método GetAll() do webservice para retornar os funcionários.
2 - No evento Click do botão Procurar temos o código que permite selecionar uma imagem e exibir no PictureBox - picFoto usando o OpenFileDialog:
private void btnProcurar_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "JPEG|*.jpg|PNG|*.png", ValidateNames = true })
{
if(ofd.ShowDialog() == DialogResult.OK)
{
picFoto.Image = Image.FromFile(ofd.FileName);
Funcionario ofunci = funcionarioBindingSource.Current as Funcionario;
if (ofunci != null)
ofunci.ImagemUrl = ofd.FileName;
}
}
}
|
3 - Código do evento CellClick do MetroGrid. ocorre quando o usuário clica em uma célula do Grid e exibe os dados no Formulário:
private void gdAlunos_CellClick(object sender, DataGridViewCellEventArgs e)
{
try
{
Funcionario ofunci = funcionarioBindingSource.Current as Funcionario;
if (ofunci != null)
{
if (!string.IsNullOrEmpty(ofunci.ImagemUrl))
picFoto.Image = Image.FromFile(ofunci.ImagemUrl);
}
}
catch(Exception ex)
{
MetroFramework.MetroMessageBox.Show(this, ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
4 - Código do botão Deletar onde invocamos o método Delete() do web serivce para excluir o funcionário selecionado pelo seu ID.
private void btnDeletar_Click(object sender, EventArgs e)
{
oStatus = EntityState.Deleted;
if (MetroFramework.MetroMessageBox.Show(this, "Tem certeza que deseja Excluir este registro", "Excluir ?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
try
{
Funcionario ofunci = funcionarioBindingSource.Current as Funcionario;
if (ofunci != null)
{
Funcionario ofunci = funcionarioBindingSource.Current as Funcionario;
if (ofunci != null)
{
FuncionariosServiceSoapClient funci = new FuncionariosServiceSoapClient();
bool resultado = funci.Delete(ofunci.FuncionarioID);
if (resultado)
{
funcionarioBindingSource.RemoveCurrent();
pContainer.Enabled = false;
picFoto.Image = null;
oStatus = EntityState.Unchanged;
}
}
}
}
catch (Exception ex)
{
MetroFramework.MetroMessageBox.Show(this, ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
|
5 - Código do botão Editar definindo a operação como Changed(alteração), habilitando o Panel (pContainer) e colocando o foco na caixa de texto para informar o nome:
private void btnEditar_Click(object sender, EventArgs e)
{
oStatus = EntityState.Changed;
pContainer.Enabled = true;
txtNome.Focus();
}
|
A alteração será efetivada quando o botão Salvar for clicado.
6 - Código do botão Cancelar habiliando o Panel (pContainer) resetando o bindingSource e carregando o formulário novamente:
private void btnCancelar_Click(object sender, EventArgs e)
{
pContainer.Enabled = false;
funcionarioBindingSource.ResetBindings(false);
this.Form1_Load(sender,e);
}
|
7 - Código do botão Adicionar que define o modo de alteração para Added, habilita o Panel, inclui um novo Funcionario e se move para o último registro colocando o foco no Nome:
private void btnAdicionar_Click(object sender, EventArgs e) { oStatus = EntityState.Added; picFoto.Image = null; pContainer.Enabled = true; funcionarioBindingSource.Add(new Funcionario()); funcionarioBindingSource.MoveLast(); funcionarioBindingSource.AddNew(); LimpaControles(); txtNome.Focus(); } |
A inclusão será efetivada quando o botão Salvar for clicado.
8 - Código do botão Salvar verificamos se o modo de operação é edição e neste caso chamamos o método Update() do web service para alterar os dados. No modo Added vamos incluir dados na tabela Funcionarios chamando o método Inserir() do web service:
private void btnSalvar_Click(object sender, EventArgs e)
{
try
{
funcionarioBindingSource.EndEdit();
Funcionario ofunci = funcionarioBindingSource.Current as Funcionario;
if (ofunci != null)
{
FuncionariosServiceSoapClient funci = new FuncionariosServiceSoapClient();
if(oStatus==EntityState.Added)
{
ofunci.FuncionarioID = funci.Inserir(ofunci);
}
else if( oStatus==EntityState.Changed)
{
funci.Update(ofunci);
}
gdFuncionarios.Refresh();
pContainer.Enabled = false;
oStatus = EntityState.Unchanged;
}
}
catch (Exception ex)
{
MetroFramework.MetroMessageBox.Show(this, ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
Agora é só alegria...
Executando o projeto temos o seguinte resultado:
Temos assim a nossa aplicação Windows Forms usando o estilo Metro e realizando o CRUD via web service para manutenção de dados no SQL Server com Dapper.
Pegue o código da solução aqui: CRUD_Dapper_WebService.zip (sem as referências)
(Disse Jesus)
O meu mandamento é este: Que vos ameis
uns aos outros, assim como eu vos amei.
João 15:12
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
VB .NET - Implementando interfaces ao estilo Metro com ... - Macoratti