C# - CRUD no SQL Server com Dapper e MetroFramework - II
Neste artigo vamos rever conceitos básicos de acesso a dados e usar recursos para melhorar a aparência da nossa aplicação Windows Forms usando o estilo Metro. |
Continuando a primeira parte do artigo vamos implementar as operações CRUD usando o Dapper.
Recursos Usados :
Implementando o CRUD com Dapper
1 - No evento Load do formulário temos o código que vai selecionar os dados da tabela Funcionarios e exibir os dados no Grid e no formulário :
private void Form1_Load(object sender, EventArgs e) { try { using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexaoSqlServer"].ConnectionString)) { if (db.State == ConnectionState.Closed) { db.Open(); } funcionarioBindingSource.DataSource = db.Query<Funcionario>("Select * from Funcionarios", commandType: CommandType.Text); 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); } } |
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 é executado a instrução SQL delete from para exclui o funcionário selecionado pelo seu ID. Se a exclusão for realizada com sucesso os dados são atualizados na interface:
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) { using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexaoSqlServer"].ConnectionString)) { if (db.State == ConnectionState.Closed) { db.Open(); } int resultado = db.Execute("delete from Funcionarios where FuncionarioID= @FuncionarioID", new { FuncionarioID = ofunci.FuncionarioID }, commandType: CommandType.Text); if (resultado != 0) { 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();
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 usamos a stored procedure sp_Funcionarios_Atualizar para alterar os dados. No modo Added vamos incluir dados na tabela Funcionarios usando a stored procedure sp_Funcionarios_Inserir.
private void btnSalvar_Click(object sender, EventArgs e) { try { funcionarioBindingSource.EndEdit(); Funcionario ofunci = funcionarioBindingSource.Current as Funcionario; if (ofunci != null) { using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexaoSqlServer"].ConnectionString)) { if (db.State == ConnectionState.Closed) { db.Open(); } if(oStatus==EntityState.Added) |
Agora é só alegria...
Executando o projeto teremos o seguinte resultado:
Pegue o projeto aqui : CRUD_Dapper.zip (sem as referências)
(Disse Jesus)
Todo o que o Pai me dá virá a mim; e o
que vem a mim de maneira nenhuma o lançarei fora.
João 6:37
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