Nesta aula iremos aprender como alterar o nosso ORM para fazer alterações e exclusões de forma genérica.
Nesta aula vamos trazer os dados dos Usuarios no banco de dados através do ORM.
Para isso iremos inserir o componente DataGridView no formulário.
A propriedade name será chamada de dgUsuarios.
No evento Load do formulário iremos preencher a propriedade DataSource do dgUsuario com todos os Usuarios.
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
Private void Form1_Load(object sender, EventsArgs e )
{
loadAll()
}
private void loadAll()
{
dgUsuarios.DataSource = new Usuario().Todos();
}
}
}
Na classe Usuario vamos criar um novo método Todos() com a palavra new.
Este novo método irá buscar todos os campos da tabela Usuarios através do método Todos() da classe Base.
namespace Database
{
public class Usuario : Base
{
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Nome {get;set}
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Telefone {get;set}
[OpcoesBase (UsarNoBancoDeDados = true, chavePrimaria = true, UsarParaBuscar = true)]
public string CPF {get;set;}
}
public new List< Usuario> Todos()
{
var usuarios = new List< Usuario>();
foreach (var ibase in base.Todos())
{
usuarios.Add((Usuario)ibase);
}
return usuarios;
}
}
Vamos utilizar o evento CellDoubleClick do DataGridView para obter a linha do Usuario que desejamos alterar.
Mudar a propriedade Text do componente button para Alterar.
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void dgUsuarios_CellDoubleClick(object sender, DataGridViewEventArgs e)
{
Usuario usuario = ((Usuario)dgUsuarios.Rows[e.RowIndex].DataBoundItem);
TxtNome.Text = usuario.Nome;
TxtTelefone.Text = usuario.Telefone;
TxtCPF.Text = usuario.CPF;
txtId.Text = usuario.Id.ToString();
btnGravar.Text = "Alterar";
}
}
}
Criar método LimparCampos() para limpar os campos de todos os textBox.
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void limparCampos()
{
TxtNome.Text = string.Empty;
TxtTelefone.Text = string.Empty;
TxtCPF.Text = string.Empty;
TxtId.Text = string.Empty;
btnGravar.Text = "Gravar";
}
}
}
Agora podemos alterar os campos que estão nos TextBox e gravá-los no banco de dados, através do método Salvar() da instância de usuario.
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void Gravar()
{
Usuario usuario = new Usuario();
if (txtId.text !="")
{
usuario.Id = int.Parse(txtId.Tetx);
}
usuario.Nome = TxtNome.Text;
usuario.Telefone = TxtTelefone.Text;
usuario.CPF = TxtCPF.Text;
usuario.Salvar();
limparCampos();
loadAll()
MessageBox.Show ("Usuario salvo com sucesso");
}
}
}
Vamos fazer uma mudança na tabela de Usuario, criando o campo id par verificar se o id já existe na tabela e assim poder fazer alteração.
Para isso, criaremos o campo id e vamos definí-lo como auto incremento no SQL Server através do comando:
alter table usuarios add int identity
O Campo id , do tipo int, será o novo Key na classe Usuario, definindo chavePrimaria = true
Vamos retirar chavePrimaria = true do campo CPF, como mostra o código abaixo:
namespace Database
{
public class Usuario : Base
{
[OpcoesBase (UsarNoBancoDeDados = true, chavePrimaria = true, UsarParaBuscar = true)]
public int id {get;set;}
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Nome {get;set}
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Telefone {get;set}
[OpcoesBase (UsarNoBancoDeDados = true, UsarParaBuscar = true)]
public string CPF {get;set;}
}
}
Para organizar as colunas do DataGridView de uma maneira que nós queremos que sejam mostrados no grid, vamos utilizar uma propriedade do DataGridView chamada AutoGenerateColums = false, no evento Load do formulário.
Assim iremos inserir as colunas manualmente, na ordem que se deseja.
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
Private void Form1_Load(object sender, EventsArgs e )
{
loadAll()
}
private void loadAll()
{
dgUsuarios.AutoGenerateColums = false;
dgUsuarios.DataSource = new Usuario().Todos();
}
}
}
Para inserir as colunas manualmente:
using System.Reflexion;
namespace Database
{
public class Base : IBase
{
private string connectionString = ConfigurationManager,AppSettings["SqlConnection"];
public int Key
{
get
{
foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
OpcoesBase pOpcoesBase = (OpcoesBase)pi.GetCustomAttribute(typeof(OpcoesBase))
if (pOpcoesBase != null && pOpcoesBase.ChavePrimaria)
{
return Convert.ToInt32(pi.GetValue(this));
}
}
return 0;
}
}
}
}
namespace Database
{
public Interface IBase
{
int Key {get;}
void Salvar();
List< IBase> Todos();
List< IBase> Busca();
}
}
using System.Reflexion;
namespace Database
{
public class Base : IBase
{
public virtual void Salvar()
{
using (SqlConnection connection = new SqlConnection(connectionstring))
{
List< string > campos = new List< string >();
List< string > valores = new List< string >();
foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
OpcoesBase pOpcoesBase = (OpcoesBase)pi.GetCustomAttribute(typeof(OpcoesBase))
if (pOpcoesBase != null && pOpcoesBase.UsarNoBancoDeDados)
{
if(this.key == 0)
{
if (!pOpcoesBase.ChavePrimaria)
{
campos.Add(pi.Nome);
valores.Add("'" + pi.GetValue(this) + "'");
}
}
else
{
if (!pOpcoesBase.ChavePrimaria)
{
valores.Add(" " + pi.Name + " = '" + pi.GetValue(this) + "'");
}
}
}
}
if(this.key == 0)
{
string queryString = "insert into " + this.GetType().Name + "s (" + string.Join(", ",campos.ToArray())+ ")
values(" + string.Join(", ",valores.ToArray())
}
else
{
if (!pOpcoesBase.ChavePrimaria)
{
string queryString = "update" + this.GetType().Name + "s set (" + string.Join(", ",valores.ToArray())
+ " where id = " + this.key +";"
}
}
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
}
}
}
Vamos criar um botão para excluir um registro, chamado btnExcluir
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void btnExcluir_Click(object sender, EventArgs e)
{
var retorno = MessageBox.Show("Tem certeza que deseja excluir?","Excluir",MessageBoxButtons.YesNo, MessageBoxIcon.QUestion );
if (retorno.Equals(DialogResult.Yes))
{
foreach(var DataGridViewRow in dgUsuarios.SelectedRows)
{
Usuario usuario = ((Usuario)dgUsuarios.Rows[cell.RowIndex].DataBoundItem);
usuario.Excluir();
}
foreach(var DataGridViewRow in dgUsuarios.SelectedRows)
{
Usuario usuario = ((Usuario)row.DataBoundItem);
usuario.Excluir =
}
}
loadAll();
}
}
}
using System.Reflexion;
namespace Database
{
public class Base : IBase
{
public virtual void Excluir()
{
using (SqlConnection connection = new SqlConnection(connectionstring))
{
foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
string queryString = "delete from " + this.GetType().Name + "s "
+ " where id = " + this.key +";"
}
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
}
}
}
Nesta aula iremos aprender como alterar o nosso ORM para fazer alterações e exclusões de forma genérica.
Nesta aula vamos trazer os dados dos Usuarios no banco de dados através do ORM.
Para isso iremos inserir o componente DataGridView no formulário.
A propriedade name será chamada de dgUsuarios.
No evento Load do formulário iremos preencher a propriedade DataSource do dgUsuario com todos os Usuarios.
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
Private void Form1_Load(object sender, EventsArgs e )
{
loadAll()
}
private void loadAll()
{
dgUsuarios.DataSource = new Usuario().Todos();
}
}
}
Na classe Usuario vamos criar um novo método Todos() com a palavra new.
Este novo método irá buscar todos os campos da tabela Usuarios através do método Todos() da classe Base.
namespace Database
{
public class Usuario : Base
{
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Nome {get;set}
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Telefone {get;set}
[OpcoesBase (UsarNoBancoDeDados = true, chavePrimaria = true, UsarParaBuscar = true)]
public string CPF {get;set;}
}
public new List< Usuario> Todos()
{
var usuarios = new List< Usuario>();
foreach (var ibase in base.Todos())
{
usuarios.Add((Usuario)ibase);
}
return usuarios;
}
}
Vamos utilizar o evento CellDoubleClick do DataGridView para obter a linha do Usuario que desejamos alterar.
Mudar a propriedade Text do componente button para Alterar.
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void dgUsuarios_CellDoubleClick(object sender, DataGridViewEventArgs e)
{
Usuario usuario = ((Usuario)dgUsuarios.Rows[e.RowIndex].DataBoundItem);
TxtNome.Text = usuario.Nome;
TxtTelefone.Text = usuario.Telefone;
TxtCPF.Text = usuario.CPF;
txtId.Text = usuario.Id.ToString();
btnGravar.Text = "Alterar";
}
}
}
Criar método LimparCampos() para limpar os campos de todos os textBox.
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void limparCampos()
{
TxtNome.Text = string.Empty;
TxtTelefone.Text = string.Empty;
TxtCPF.Text = string.Empty;
TxtId.Text = string.Empty;
btnGravar.Text = "Gravar";
}
}
}
Agora podemos alterar os campos que estão nos TextBox e gravá-los no banco de dados, através do método Salvar() da instância de usuario.
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void Gravar()
{
Usuario usuario = new Usuario();
if (txtId.text !="")
{
usuario.Id = int.Parse(txtId.Tetx);
}
usuario.Nome = TxtNome.Text;
usuario.Telefone = TxtTelefone.Text;
usuario.CPF = TxtCPF.Text;
usuario.Salvar();
limparCampos();
loadAll()
MessageBox.Show ("Usuario salvo com sucesso");
}
}
}
Vamos fazer uma mudança na tabela de Usuario, criando o campo id par verificar se o id já existe na tabela e assim poder fazer alteração.
Para isso, criaremos o campo id e vamos definí-lo como auto incremento no SQL Server através do comando:
alter table usuarios add int identity
O Campo id , do tipo int, será o novo Key na classe Usuario, definindo chavePrimaria = true
Vamos retirar chavePrimaria = true do campo CPF, como mostra o código abaixo:
namespace Database
{
public class Usuario : Base
{
[OpcoesBase (UsarNoBancoDeDados = true, chavePrimaria = true, UsarParaBuscar = true)]
public int id {get;set;}
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Nome {get;set}
[OpcoesBase (UsarNoBancoDeDados = true)]
public string Telefone {get;set}
[OpcoesBase (UsarNoBancoDeDados = true, UsarParaBuscar = true)]
public string CPF {get;set;}
}
}
Para organizar as colunas do DataGridView de uma maneira que nós queremos que sejam mostrados no grid, vamos utilizar uma propriedade do DataGridView chamada AutoGenerateColums = false, no evento Load do formulário.
Assim iremos inserir as colunas manualmente, na ordem que se deseja.
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
Private void Form1_Load(object sender, EventsArgs e )
{
loadAll()
}
private void loadAll()
{
dgUsuarios.AutoGenerateColums = false;
dgUsuarios.DataSource = new Usuario().Todos();
}
}
}
Para inserir as colunas manualmente:
using System.Reflexion;
namespace Database
{
public class Base : IBase
{
private string connectionString = ConfigurationManager,AppSettings["SqlConnection"];
public int Key
{
get
{
foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
OpcoesBase pOpcoesBase = (OpcoesBase)pi.GetCustomAttribute(typeof(OpcoesBase))
if (pOpcoesBase != null && pOpcoesBase.ChavePrimaria)
{
return Convert.ToInt32(pi.GetValue(this));
}
}
return 0;
}
}
}
}
namespace Database
{
public Interface IBase
{
int Key {get;}
void Salvar();
List< IBase> Todos();
List< IBase> Busca();
}
}
using System.Reflexion;
namespace Database
{
public class Base : IBase
{
public virtual void Salvar()
{
using (SqlConnection connection = new SqlConnection(connectionstring))
{
List< string > campos = new List< string >();
List< string > valores = new List< string >();
foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
OpcoesBase pOpcoesBase = (OpcoesBase)pi.GetCustomAttribute(typeof(OpcoesBase))
if (pOpcoesBase != null && pOpcoesBase.UsarNoBancoDeDados)
{
if(this.key == 0)
{
if (!pOpcoesBase.ChavePrimaria)
{
campos.Add(pi.Nome);
valores.Add("'" + pi.GetValue(this) + "'");
}
}
else
{
if (!pOpcoesBase.ChavePrimaria)
{
valores.Add(" " + pi.Name + " = '" + pi.GetValue(this) + "'");
}
}
}
}
if(this.key == 0)
{
string queryString = "insert into " + this.GetType().Name + "s (" + string.Join(", ",campos.ToArray())+ ")
values(" + string.Join(", ",valores.ToArray())
}
else
{
if (!pOpcoesBase.ChavePrimaria)
{
string queryString = "update" + this.GetType().Name + "s set (" + string.Join(", ",valores.ToArray())
+ " where id = " + this.key +";"
}
}
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
}
}
}
Vamos criar um botão para excluir um registro, chamado btnExcluir
namespace TresCamadas
{
public partial class Form1 :
{
public Form1()
{
InitializeComponenent()
}
private void btnExcluir_Click(object sender, EventArgs e)
{
var retorno = MessageBox.Show("Tem certeza que deseja excluir?","Excluir",MessageBoxButtons.YesNo, MessageBoxIcon.QUestion );
if (retorno.Equals(DialogResult.Yes))
{
foreach(var DataGridViewRow in dgUsuarios.SelectedRows)
{
Usuario usuario = ((Usuario)dgUsuarios.Rows[cell.RowIndex].DataBoundItem);
usuario.Excluir();
}
foreach(var DataGridViewRow in dgUsuarios.SelectedRows)
{
Usuario usuario = ((Usuario)row.DataBoundItem);
usuario.Excluir =
}
}
loadAll();
}
}
}
using System.Reflexion;
namespace Database
{
public class Base : IBase
{
public virtual void Excluir()
{
using (SqlConnection connection = new SqlConnection(connectionstring))
{
foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
string queryString = "delete from " + this.GetType().Name + "s "
+ " where id = " + this.key +";"
}
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
}
}
}