Na primeira parte do artigo criarmos o banco de dados SQL Server Local Vendas.sdf e a tabela Produtos usando o próprio IDE do Visual Studio 2012 Express for windows desktop. |
Criamos o projeto Windows Forms e definimos a classe DAL que terá a responsabilidade de acessar e persistir as informações no banco de dados.
Vamos agora implementar as funcionalidades para realizar as operações CRUD a partir da interface do usuário que é o formulário form1.cs.
Antes disso vamos criar a classe Produto que representa um produto e reflete as colunas da tabela Produtos. Essa classe será usada para passar informações da camada de interface com a classe DAL responsável pelo acesso aos dados.
No menu PROJECT clique em Add New Item e selecione o template Class e informe o nome Produto.cs. A seguir coloque o código abaixo nesta classe:
public class Produto
{
public int Id { get; set; }
public string nome { get; set; }
public int estoque { get; set; }
public decimal custo { get; set; }
public string descricao { get; set; }
}
|
Agora podemos iniciar a implementação das funcionalidades para incluir, alterar, excluir e exibir dados no formulário form1.cs.
1- Selecionado e carregando dados da tabela Produtos e exibindo no DataGridView
Ao carregar o formulário form1.cs vamos acessar os dados da tabela Produtos e exibi-los no DataGridView.
Vamos usar o evento Load do formulário e incluir o código abaixo neste evento:
private void Form1_Load(object sender, EventArgs e)
{
exibirDados();
}
|
Este código chama a rotina exibirDados() cujo código vemos a seguir:
private void exibirDados()
{
DAL _dal = new DAL();
dgvProdutos.DataSource = _dal.Load("Select * from Produtos");
}
|
No código estamos criando uma instância da classe DAL e chamando o método Load() que retorna um DataTable() que será exibido no DataGridView:
Aqui cabe um ressalva.
Como eu não criei uma camada de negócios estou definindo as instruções SQL tipo texto no formulário o que não é recomendado em uma aplicação de produção. O correto seria eu chamar um método da camada de negócio que teria a responsabilidade de definir a instrução SQL.
2- Clicando em uma linha e exibindo os valores das células do DataGridView nos TextBox do formulário
Para facilitar a seleção dos registros vamos permitir que o usuário ao clicar em uma linha do DataGridView os valores de cada célula sejam exibidos nos controles TextBox do formulário.
Para isso vamos usar o evento CellClick do controle DataGridView definindo o código a seguir:
private void dgvProdutos_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dgvProdutos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null)
{
txtId.Text = dgvProdutos.Rows[e.RowIndex].Cells[0].Value.ToString();
txtNome.Text = dgvProdutos.Rows[e.RowIndex].Cells[1].Value.ToString();
txtEstoque.Text = dgvProdutos.Rows[e.RowIndex].Cells[2].Value.ToString();
txtCusto.Text = dgvProdutos.Rows[e.RowIndex].Cells[3].Value.ToString();
txtDescricao.Text = dgvProdutos.Rows[e.RowIndex].Cells[4].Value.ToString();
}
}
|
3- Localizando um registro a partir do código do produto
O usuário poderá localizar um registro da tabela Produtos informando o código na caixa de Texto (txtId) Código. A informação será retornada preenchendo cada um dos TextBox do formulário com seu respectivo valor.
Para isso vamos incluir o código abaixo no evento Click do botão btnLocalizar:
private void btnLocalizar_Click(object sender, EventArgs e)
{
try
{
DAL _dal = new DAL();
int codigo = Convert.ToInt32(txtId.Text);
string sql = "Select * from Produtos Where Id=" + codigo;
DataTable dtProdutos = new DataTable();
dtProdutos = _dal.Load(sql);
txtId.Text = dtProdutos.Rows[0][0].ToString();
txtNome.Text = dtProdutos.Rows[0][1].ToString();
txtEstoque.Text = dtProdutos.Rows[0][2].ToString();
txtCusto.Text = dtProdutos.Rows[0][3].ToString();
txtDescricao.Text = dtProdutos.Rows[0][4].ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
|
No código, após criar um instância da classe DAL, obtemos o valor do código informado na caixa de texto txtId e definimos uma instrução SQL para selecionar todos os registros da tabela Produtos para este código.
A seguir criamos um DataTable e obtemos o resultado retornado pelo método Load(sql). Como o retorno é um DataTable obtemos o valor de cada uma das colunas da primeira linha do DataTable retornado.
Note que usamos a sintaxe : dtProdutos.Rows[número da linha][número da coluna]
Onde o valor zero para Rows é fixo pois teremos apenas um único registro. O valor de cada coluna é indicado pelo índice iniciando na primeira coluna (0) até a última (4). Ex: dtProdutos.Rows[0][4].ToString();
3- Incluindo registros
private void btnIncluir_Click(object sender, EventArgs e) { try { DAL _dal = new DAL(); Produto prod = new Produto(); prod.nome = txtNome.Text; prod.estoque = Convert.ToInt32(txtEstoque.Text); prod.custo = Convert.ToDecimal(txtEstoque.Text); prod.descricao = txtDescricao.Text;
_dal.Insert(prod,"Insert Into Produtos(Nome,Estoque,Custo,Descricao) values(@nome,@estq,@cust,@desc)"); |
Para incluir registros criamos uma instância da classe Produto e atribuímos os valores informados nos TextBox a cada propriedade do objeto prod :
Produto prod = new Produto();
prod.nome = txtNome.Text;
prod.estoque = Convert.ToInt32(txtEstoque.Text);
prod.custo = Convert.ToDecimal(txtEstoque.Text);
prod.descricao = txtDescricao.Text;
A seguir chamamos o método Insert() passando o objeto Produto(prod) e a string SQL para inclusão dos valores:
Insert Into Produtos(Nome,Estoque,Custo,Descricao) values(@nome,@estq,@cust,@desc)
4- Alterando registros
private void btnAtualizar_Click(object sender, EventArgs e) { try { DAL _dal = new DAL(); Produto prod = new Produto(); prod.Id = Convert.ToInt32(txtId.Text); prod.nome = txtNome.Text; prod.estoque = Convert.ToInt32(txtEstoque.Text); prod.custo = Convert.ToDecimal(txtCusto.Text); prod.descricao = txtDescricao.Text;
_dal.Update(prod, "Update Produtos set Nome=@nome, Estoque=@estq , Custo=@cust ,Descricao=@desc Where Id=@codigo"); |
A lógica para atualizar registros é a mesma que a usada para incluir. Criamos uma instância da classe Produto e atribuímos os valores informados nos TextBox a cada propriedade do objeto prod :
Produto prod = new Produto();
prod.nome = txtNome.Text;
prod.estoque = Convert.ToInt32(txtEstoque.Text);
prod.custo = Convert.ToDecimal(txtEstoque.Text);
prod.descricao = txtDescricao.Text;
A seguir chamamos o método Update() passando o objeto Produto(prod) e a string SQL para inclusão dos valores:
Update Produtos set Nome=@nome, Estoque=@estq , Custo=@cust ,Descricao=@desc Where Id=@codigo
5- Excluindo registros
private void btnExcluir_Click(object sender, EventArgs e)
{
try
{
DAL _dal = new DAL();
int codigo = Convert.ToInt32(txtId.Text);
_dal.Delete(codigo,"Delete from Produtos where Id=@codigo");
exibirDados();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
|
Na exclusão de registros obtemos o código do Produto na caixa de texto txtId e chamamos o método Delete() passando o código a instrução SQL:
"Delete from Produtos where Id=@codigo
6- Limpar as caixas de Texto
public static void LimparTextBox(Control parent)
{
foreach (Control c in parent.Controls)
{
if (c.GetType() == typeof(TextBox))
{
((TextBox)(c)).Text = string.Empty;
}
}
}
|
No botão Limpar temos a chamada da rotina LimparTextBox() que percorre os controles TextBox do formulário e limpa os seus valores.
Temos dessa forma a implementação das funcionalidades CRUD usando ADO .NET e um banco de dados SQL Server Compact 4.0.
Você pode melhorar o projeto criando a camada de negócios e removendo as strings SQL e os objetos ADO .NET que usamos na interface.
Pegue o projeto completo aqui: BancodeDadosLocal.zip
João 8:45 Mas porque eu digo a verdade, não me credes.
João 8:46 Quem dentre vós me convence de pecado? Se digo a verdade, por que não me credes?
João 8:47 Quem é de Deus ouve as palavras de Deus; por isso vós não as ouvis, porque não sois de Deus.
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#