Desenvolvendo Aplicações para Pocket PC – Parte III

 

Neste artigo teremos como objetivo os seguintes itens:

 

 - Gravar, excluir e pesquisar dados.

 - Entender e utilizar os componentes DataSet, BindingSource.

 - Entender e utilizar as classes SqlCeDataAdapter e SqlCeCommandBuilder.

 

Bom continuando o nosso pequeno projeto, no último artigo configuramos nosso ambiente de desenvolvimento com SQL Móbile, com nosso Banco de Dados criado faltando agora realizar as regras de negócio e a interface do mesmo.

 

Como já temos a tabela Cliente em nosso Banco de Dados, vamos desenvolver uma tela onde será possível gravar e excluir dados.

 

Primeiramente iremos criar um novo projeto do tipo Smart Device, para Windows Pocket PC 5.0 conforme Figura 1.

 

jfdapp3fig01.jpg 

Figura 1 - Criando projeto para Smart Device.

 

Ao criar o projeto o Visual Studio irá apresentar um form, este será o nosso form principal, nesse colocaremos um menu para acessar a todas as telas. Para início foram definidos dois MenuItem: Sair e Cliente como pode ser visto no Figura 2.

 

O MenuItem Sair será responsável por finalizar a aplicação no Pocket PC, para isto será necessário implementar o código que pode ser visto na Listagem 1.

 

private void menuItem1_Click(object sender, EventArgs e)

{

    Application.Exit();

}

Listagem 1 – Código para encerrar a aplicação no Pocket PC

 

jfdapp3fig02.jpg 

Figura 2 – Aplicação com os Menus Cliente e Sair.

 

Agora vamos criar um novo form, este será utilizado para cadastrarmos os dados do Cliente, como mostra a Figura 3.

 

jfdapp3fig03.jpg 

Figura 3 - Tela para cadastro de clientes.

 

O código necessário para instanciar o form Cliente e apresenta-lo no Pocket PC pode ser visto na Listagem 2.

 

private void menuItem2_Click(object sender, EventArgs e)

{

  Cliente cliente = new Cliente();

  cliente.Show();

}

Listagem 2 – Código necessário para instanciar o form Cliente.

 

Após termos implementados os dois forms e tratado a chamada para o form Cliente, trataremos agora o parte de conexão com o Banco de Dados.

 

No artigo passado ao criarmos o Banco de Dados, definimos qual seria o caminho do mesmo, pois bem, este caminho será necessário para que possamos conectar ao Banco de Dados.

 

Para isto iremos criar uma classe Conexao que tratará todos os métodos que vamos precisar para conectar ao Banco, realizar uma pesquisa e outros. Para adicionar uma classe no nosso projeto, clicamos com o botão direto do mouse sobre o Projeto no ToolBox Solution Explorer e depois Add -> Class, como pode ser visto na Figura 4.

 

jfdapp3fig04.jpg 

Figura 4 – Adicionando uma nova classe no projeto.

 

Após termos adicionado a Classe Conexao, iremos em seu código e passaremos a mesma para uma classe Estática, ou seja, para executar seus métodos não será necessário instanciar um objeto desta classe, a chamada será executada da própria classe.

 

O primeiro método que iremos criar é de Conectar(). Que será responsável por verificar se o banco de Dados existe e conectar ao mesmo.

 

Para trabalharmos com comandos de acesso a Dados no Pocket PC, necessitamos de utilizar uma referência em nosso projeto que é System.Data.SqlServerCe para móbile. Para isto, botão direito em Reference -> Add e será apresentada a imagem conforme Figura 5, após escolha a referência que deseja utilizar e clique em OK.

 

jfdapp3fig05.jpg 

Figura 5 - Adicionando referência para System.Data. SqlServerCe.

 

Ao terminar este primeiro método a classe Conexao até o momento se encontra de acordo com a Listagem 3.

 

using System;

using System.Collections.Generic;

using System.Text;

using System.Data.SqlServerCe;

using System.Windows.Forms;

 

namespace PocketIII

{

  public static class Conexao

  {

    public static SqlCeConnection conexao;

   

    public static void Conectar()

    {

      string stringconexao = "Data Source = \\My Documents\\First.sdf;";

      conexao = new SqlCeConnection(stringconexao);

      try

      {

        conexao.Open();

      }

      catch(Exception e)

      {

        MessageBox.Show("Não foi possível conectar devido ao erro : " + e.Message);

        Application.Exit();

      }

    }

 

  }

}

Listagem 3 – Classe Conexao após ter sido implementado o método Conectar.

 

Com nossa aplicação realizando a conexão com o Banco de Dados, iremos criar os métodos para exclusão e gravação.

 

Para isto na nossa tela de clientes necessitaremos dos seguintes componentes:

 - SqlceDataAdapter – será responsável por carregar o DataSet e atualizar os dados que se encontram no mesmo para o Banco de Dados.

 - DataSet – será responsável por armazenar os dados na memória antes de serem atualizados no banco de Dados.

-  BindingSource – será responsável por realizar a ligação entre os campos da tela aos campos da tabela, também executa dos comandos de início de inserção e final de atualização dos dados.

 

Sendo que para os dois primeiros teremos que tratar como variáveis do Form e o BindingSource poderá ser escolhido no ToolBox.

 

Para que nosso SqlCeDataAdapter possa estar com os comandos de inserção, alteração e exclusão foi necessário implementar o método CarregaDataAdapter e utilizar a classe SqlCeCommandBuilder. Este método irá gerar os comandos de inserção, alteração e exclusão e irá carregar os dados para o DataSet. O código deste método pode ser visualizado na Listagem 4.

 

    public static void CarregaDataAdapter(SqlCeDataAdapter adapter, string sql, DataSet ds, BindingSource bds)

    {

      SqlCeCommandBuilder comBuilder = new SqlCeCommandBuilder(adapter);

      adapter.SelectCommand = new SqlCeCommand(sql, conexao);

      adapter.Fill(ds);

      bds.DataSource = ds;

      bds.DataMember = ds.Tables[0].TableName;

    }

Listagem 4 – Carregando o DataSet e gerando os códigos de alteração,inserção e exclusão para o SqlCeDataAdapter.

 

Tendo o nosso SqlCeDataAdapter com os comandos gerados e nosso DataSet carregado com os dados da tabela, podemos então setar cada controle com o campo que o mesmo estará ligado. Esta funcionalidade será tratada pelo método ConfiguraBindingControl, como pode ser visto na Listagem 5.

 

public static void ConfiguraBindingControl(Control ctr, string propriedade, BindingSource bds,string campo)

{

   ctr.DataBindings.Add(new Binding(propriedade, bds, campo));

}

Listagem 5 – Setando para o controle passado, qual será o campo da tabela que o mesmo estará vinculado.

 

Com todos estes métodos criados o que resta realmente são os métodos para Gravar,Inserir e Excluir, como podem ser vistos na Listagem 6.

 

public static void Novo(BindingSource bds)

{

   bds.AddNew();

}

 

public static void Gravar(BindingSource bds, SqlCeDataAdapter adapter, DataSet ds)

{

   if (MessageBox.Show("Desejar gravar os dados informados?", "Atenção", MessageBoxButtons.YesNo, MessageBoxIcon.Question,MessageBoxDefaultButton.Button1) == DialogResult.No)

      return;

 

   int pos = bds.Position;

 

   bds.EndEdit();

   adapter.Update(ds);

 

   MessageBox.Show("Dados gravados com sucesso!");

 

   ds.Clear();

   adapter.Fill(ds);

 

   bds.Position = pos;

}

 

public static void Excluir(BindingSource bds, SqlCeDataAdapter adapter, DataSet ds)

{

   if (MessageBox.Show("Desejar excluir o registro corrente?", "Atenção", MessageBoxButtons.YesNo, MessageBoxIcon.Question,MessageBoxDefaultButton.Button2) == DialogResult.No)

     return;

 

   bds.RemoveCurrent();

   bds.EndEdit();

   adapter.Update(ds);

}

Listagem 6  - Métodos que tratarão à inserção e exclusão dos dados.

 

Com estes métodos criados na classe Conexao conseguiremos inserir,alterar, excluir e gravar dados. Na Figura 6 e 7, podemos ver alguns registros já gravados, tanto na tela do cliente como na tela de pesquisa.

 

Para tratarmos o form Pesquisa, adicionamos um outro form, inserimos no mesmo um DataGrid setando o dock do mesmo como fill. Para o método construtor do mesmo alteramos para receber como parâmetro o BindingSource da tela que o chamou. Neste form também foi tratado para se o usuário clicar duas vezes em cima de um registro o mesmo será carregado.

 

O código do form Pesquisa pode ser visualizado na Listagem 7.

 

jfdapp3fig06.jpg 

Figura 6 - Tela carregada com um registro já salvo no Banco de Dados.

 

jfdapp3fig07.jpg 

Figura 7 - Tela de pesquisa contendo todos os registros.

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace PocketIII

{

  public partial class Pesquisa : Form

  {

    BindingSource bdspesquisa = null;

    public Pesquisa(BindingSource bds)

    {

      InitializeComponent();

      this.bdspesquisa = bds;

    }

 

    private void Pesquisa_Load(object sender, EventArgs e)

    {

      this.gridpesquisa.DataSource = this.bdspesquisa;

    }

 

    private void gridpesquisa_DoubleClick(object sender, EventArgs e)

    {

      if (!(gridpesquisa.CurrentCell is DBNull))

      {

        bdspesquisa.Position = gridpesquisa.CurrentCell.RowNumber;

        Close();

      }

    }

 

    private void menuItem2_Click(object sender, EventArgs e)

    {

      Close();

    }

 

    private void menuItem1_Click(object sender, EventArgs e)

    {

      if (!(gridpesquisa.CurrentCell is DBNull))

        bdspesquisa.Position = gridpesquisa.CurrentCell.RowNumber;

 

      Close();

    }

  }

}

Listagem 7 – Código do Form Pesquisa.

 

Bom agora para cada form que for gerar e que irá acessar o Banco de Dados teremos que seguir o mesmo padrão o mesmo que acabamos de realizar mas sempre realizando as devidas consistências de acordo com as necessidades.

 

Conclusão

Neste artigo construímos um formulário para cadastrar dados para uma determinada tabela utilizando a referência System.Data.SqlServerCe. Este trata as questões de conexão e atualização de registro com o Banco de dados.

 

Utilizamos e aprendemos à funcionalidade dos componentes SqlCeDataAdapter, DataSet, BindingSource, SqlCommandBuilder para acesso a dados.

 

Aprendemos a construir e instanciar novos forms, conhecer e utilizar a propriedade DataBindings dos controles.

 

Com este artigo e os anteriores temos base suficiente para desenvolvermos uma aplicação que acesse ao Banco de Dados do Pocket, que faça gravação,exclusão, alteração e pesquisa de dados. Então mãos a obra.

 

Bom, no próximo artigo iremos fazer a importação e exportação de dados para um determinado servidor utilizando Web Service.

 

Até o próximo artigo.

Leia também