WPF - Incluir, Editar e Deletar Dados com MS Access (revisitado)


 Neste artigo vou mostrar como criar uma aplicação WPF e realizar as operações básicas para incluir, editar e deletar dados acessando um banco de dados Microsoft Access.

Há um só corpo e um só Espírito, como também fostes chamados em uma só esperança da vossa vocação;
Um só Senhor, uma só fé, um só batismo;
Um só Deus e Pai de todos, o qual é sobre todos, e por todos e em todos vós.
Efésios 4:4-6

 

A WPF foi lançada na versão 3.0 do .NET Framework e  oferece uma base de recursos que trata de forma unificada as várias interfaces de usuário, podendo ser visto como um Framework unificado de apresentação gráfica. Em uma abordagem moderna o WPF oferece suporte para vídeo, gráficos de vários tipos, animação e documentos de diversos tipos com uma base comum para clientes do desktop e do Navegador.

O novo modelo de objetos apresentado pelo WPF usa classes mais modernas permitindo a criação de interface gráficas de uma forma mais simples e ágil.

A WPF apresenta como novidade a linguagem XAML que é baseada na XML mas voltada para apresentação gráfica ao usuário final. Assim esta tecnologia facilita a vida do desenvolvedor no sentido de que ele não precisa mais ter o conhecimento de várias tecnologias para criar ma interface com o usuário podendo usar os recursos integrados da WPF para criar interfaces ricas e consistentes.

Neste artigo eu vou apresentar um tutorial passo a passo de como criar  uma aplicação WPF e acessar um banco de dados realizando o famoso CRUD (Create, Read , Update e Delete).

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Criando o projeto no Visual Studio 2015 Community

Abra o VS 2015 Community e clique em New Project;

Selecione a linguagem Visual C# e o template WPF Application;

Informe o nome Wpf_Crud_MSAccess e clique no botão OK;

A seguir a partir da ToolBox inclua os seguintes controles no arquivo MaindWindow.xaml :

Disponha os controles conforme o leiaute da figura abaixo:

 

O código XAML gerado é visto a seguir:

 

<Window x:Class="Wpf_Crud_MSAccess.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Wpf_Crud_MSAccess"
        mc:Ignorable="d"
        Title="Wpf - Crud Básico" Height="700" Width="900" Background="Bisque" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
    <Window.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="FontSize" Value="20"/>
            <Setter Property="Width" Value="160"/>
            <Setter Property="Margin" Value="10"/>
        </Style>
        <Style TargetType="TextBox">
            <Setter Property="FontSize" Value="20"/>
            <Setter Property="Width" Value="250"/>
            <Setter Property="Margin" Value="10"/>
        </Style>
    </Window.Resources>
    <DockPanel Name="dockMain" VerticalAlignment="top" HorizontalAlignment="Center" LastChildFill="False">
        <StackPanel>
            <Label Content="Cadastro de Alunos" HorizontalAlignment="Center" FontSize="36" FontWeight="Bold"></Label>
            <WrapPanel>
                <TextBlock Text="Código :"/>
                <TextBox x:Name="txtCodigoAluno" />
            </WrapPanel>
            <WrapPanel>
                <TextBlock Text="Nome :"/>
                <TextBox x:Name="txtNomeAluno" />
            </WrapPanel>
            <WrapPanel>
                <TextBlock Text="Gênero :"/>
                <ComboBox FontSize="20" x:Name="ddlGenero" Width="250" Margin="10">
                    <ComboBoxItem Content="Selecione o Sexo" Selector.IsSelected="True" />
                    <ComboBoxItem Content="Masculino" />
                    <ComboBoxItem Content="Feminino" />
                </ComboBox>
            </WrapPanel>
            <WrapPanel>
                <TextBlock Text="Contato :"/>
                <TextBox x:Name="txtContato" />
            </WrapPanel>
            <WrapPanel>
                <TextBlock Text="Endereço :"/>
                <TextBox x:Name="txtEndereco" TextWrapping="Wrap" AcceptsReturn="True" Height="75" />
            </WrapPanel>
            <WrapPanel Margin="0" HorizontalAlignment="Center" Height="59">
                <Button x:Name="btnAdicionar" Content="Adicionar" FontSize="25" Width="120" Margin="5" Click="btnAdicionar_Click" />
                <Button x:Name="btnEditar" Content="Editar" FontSize="25" Width="120" Margin="5" Click="btnEditar_Click" />
                <Button x:Name="btnDeletar" Content="Deletar" FontSize="25" Width="120" Margin="5" Click="btnDeletar_Click" />
                <Button x:Name="btnCancelar" Content="Cancelar" FontSize="25" Width="120" Margin="5" Click="btnCancelar_Click" />
                <Button x:Name="btnSair" Content="Sair" FontSize="25" Width="120" Margin="5" Background="#FFF30B0B" Foreground="Bisque" Click="btnExit_Click" />
            </WrapPanel>
            <Label Content="Nenhum registro encontrado." Name="lblContador" HorizontalAlignment="Center" FontSize="16" FontWeight="Bold" Foreground="#FFE10000"></Label>
            <WrapPanel Margin="20" HorizontalAlignment="Center">
                <DataGrid AutoGenerateColumns="True" x:Name="dgDados" SelectionMode="Single" FontSize="15" Padding="5" Background="Black" />
            </WrapPanel>
        </StackPanel>
    </DockPanel>
</Window>

 

Definindo o código do projeto

 

Vamos definir agora o código do projeto no arquivo MainWindow.xaml.cs :

 

1- Declare os namespaces usados no arquivo:

using System;
using
System.Data;
using
System.Data.OleDb;
using
System.Windows;

2- Defina as variáveis objetos para a conexão e para o DataTable


OleDbConnection con;
DataTable
dt;

 

3- No construtor da classe MainWindow, vamos criar uma nova conexão e definir a string de conexão com o banco de dados Cadastro.accdb e chamar o método VinculaDados() para exibir os dados da tabela Alunos no DataGrid:

 

        public MainWindow()
        {
            InitializeComponent();
            //conecta com o banco de dados
            con = new OleDbConnection();
            con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "Cadastro.accdb"; // +";Persist security Info=false";
            VinculaDados();
        }

 

4- O código do método VinculaDados é dado a seguir:

 

         //Exibe registros no grid
        private void VinculaDados()
        {
            try
            {
                OleDbCommand cmd = new OleDbCommand();

                if (con.State != ConnectionState.Open)
                    con.Open();

                cmd.Connection = con;
                cmd.CommandText = "select * from Alunos";
                OleDbDataAdapter da = new OleDbDataAdapter(cmd);

                dt = new DataTable();
                da.Fill(dt);
                dgDados.ItemsSource = dt.AsDataView();
                if (dt.Rows.Count > 0)
                {
                    lblContador.Visibility = System.Windows.Visibility.Hidden;
                    dgDados.Visibility = System.Windows.Visibility.Visible;
                }
                else
                {
                    lblContador.Visibility = System.Windows.Visibility.Visible;
                    dgDados.Visibility = System.Windows.Visibility.Hidden;
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
            }
     }

 

O código acima abre uma conexão com o banco de dados e usa a instrução SQL - Select * from Alunos - para gerar um DataTable com os dados dos alunos vinculando-os ao datagrid via propriedade ItemsSource.

 

4- Código do evento Click do botão Adicionar :

 

     private void btnAdicionar_Click(object sender, RoutedEventArgs e)
        {
            OleDbCommand cmd = new OleDbCommand();

            if (con.State != ConnectionState.Open)
                con.Open();

            cmd.Connection = con;
            if (txtCodigoAluno.Text != "")
            {
                if (txtCodigoAluno.IsEnabled == true)
                {
                    if (ddlGenero.Text != "Selecione o gênero")
                    {
                        cmd.CommandText = "insert into Alunos(Nome,Sexo,Contato,Endereco) Values(" + txtNomeAluno.Text + "','" + ddlGenero.Text + "'," 
+ txtContato.Text + ",'" + txtEndereco.Text + "')";
                        cmd.ExecuteNonQuery();
                        VinculaDados();
                        MessageBox.Show("Aluno adicionado com sucesso...");
                        LimparTudo();
                    }
                    else
                    {
                        MessageBox.Show("Selecione o sexo do aluno....");
                    }
                }
                else
                {
                    cmd.CommandText = "update Alunos set Nome='" + txtNomeAluno.Text + "',Sexo='" + ddlGenero.Text + "',Contato=" + txtContato.Text +
 ",Endereco='" + txtEndereco.Text + "' where AlunoId=" + txtCodigoAluno.Text;
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Detalhes do Aluno atualizado com sucesso...");
                    VinculaDados();
                }
            }
            else
            {
                MessageBox.Show("Informe o Código do Aluno......");
            }
      }

 

O código acima é usado para adicionar um novo aluno e também para alterar os dados de um aluno.

 

Se o código do aluno estiver habilitado então usando a instrução SQL Insert Into para incluir as informações dos TextBox na tabela Alunos caso contrário usamos a instrução SQL Update para atualizar os dados.

 

5- Código do evento Click do botão Editar :

 

        private void btnEditar_Click(object sender, RoutedEventArgs e)
        {
            if (dgDados.SelectedItems.Count > 0)
            {
                DataRowView row = (DataRowView)dgDados.SelectedItems[0];
                txtCodigoAluno.Text = row["AlunoId"].ToString();
                txtNomeAluno.Text = row["Nome"].ToString();
                ddlGenero.Text = row["Sexo"].ToString();
                txtContato.Text = row["Contato"].ToString();
                txtEndereco.Text = row["Endereco"].ToString();
                txtCodigoAluno.IsEnabled = false;
                btnAdicionar.Content = "Atualizar";
            }
            else
            {
                MessageBox.Show("Selecione um Aluno da lista...");
            }
        }


No código do botão Editar obtemos a linha selecionada e exibimos os valores nas caixas de texto. A seguir desabilitamos o código do aluno e alteramos o texto do botão de Adicionar para Atualizar.

 

6- Código do evento Click  do botão Deletar :

 

        private void btnDeletar_Click(object sender, RoutedEventArgs e)
        {
            if (dgDados.SelectedItems.Count > 0)
            {
                DataRowView row = (DataRowView)dgDados.SelectedItems[0];
                OleDbCommand cmd = new OleDbCommand();

                if (con.State != ConnectionState.Open)
                    con.Open();

                cmd.Connection = con;

                cmd.CommandText = "delete from Alunos where AlunoId=" + row["AlunoId"].ToString();
                cmd.ExecuteNonQuery();
                VinculaDados();
                MessageBox.Show("Aluno deletado com sucesso...");
                LimparTudo();
            }
            else
            {
                MessageBox.Show("Selecione um Aluno da lista...");
            }
        }


Neste código após abrirmos a conexão, usamos a instrução SQL delete from - para deletar o aluno com o Id obtido da linha selecionada.

 

7- Código do evento Click do botão Cancelar:
 

private void btnCancelar_Click(object sender, RoutedEventArgs e)
{
            LimparTudo();
}
        private void LimparTudo()
        {
            txtCodigoAluno.Text = "";
            txtNomeAluno.Text = "";
            ddlGenero.SelectedIndex = 0;
            txtContato.Text = "";
            txtEndereco.Text = "";
            btnAdicionar.Content = "Adicionar";
            txtCodigoAluno.IsEnabled = true;
        }

No botão Cancelar chamamos o método LimparTudo() que limpa o conteúdo dos TextBox , habilita o código do aluno e altera o texto do botão de Atualizar para Adicionar:

 

8- Código do evento Click do botão Sair :
 

       private void btnSair_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("Deseja Encerrar a Aplicação ?", "Encerrar", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                Application.Current.Shutdown();
            }
     }

 

Executando o projeto inicialmente teremos o seguinte resultado:

 

 

Selecionando um registro e clicando no botão Editar teremos o resultado abaixo:

 

 

Pegue o projeto completo aqui :  Wpf_Crud_MSAccess.zip


Porque a palavra da cruz é loucura para os que perecem; mas para nós, que somos salvos, é o poder de Deus.
Porque está escrito: Destruirei a sabedoria dos sábios, E aniquilarei a inteligência dos inteligentes.

1 Coríntios 1:18,19

 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

Referências:


José Carlos Macoratti