NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalTutoriaisLanodecastro : Dataset001
Quer receber novidades e e-books gratuitos?

FILTRO DE TUTORIAIS:


Desvendando os segredos do Dataset– Parte I

 

Olá Pessoal,

 

Mais novidades para vocês. Dando continuidade aos conceitos do ADO.net para o acesso a dados, conheceremos o Dataset.

 

Podemos dizer que o Dataset é um banco de dados virtual, onde a estrutura é alocada em memória, o que permite uma melhor dinâmica no gerenciamento e controle de grande quantidade de dados.

 

Um único Dataset permite adicionar várias Tabelas. Estas tabelas podem vir de uma fonte de dados existente, como por exemplo, a tabela Clientes do banco de dados Northwind, ou pode ser criada através do próprio código. A nossa seqüência de tutoriais sobre Dataset irá abordar estes dois modos.

 

Objetivo : O objetivo deste tutorial é mostrar como construir uma aplicação com acesso a dados através do ADO.net e controle de dados através do Dataset.

 

Como vamos precisar de um banco de dados, iremos utilizar o Northwind com o Access.

 

Abra o WebMatrix e adicione um Datagrid instanciado como dgMaster e outro instanciado como dgDetalhes. Formate-o como desejar, veja:

 

 

Nesta aplicação exibiremos os pedidos no dgMaster e os detalhes destes pedidos, como os produtos que pertencem a cada pedido, serão exibidos no dgDetalhes. Para isto teremos que incluir um botão de seleção ao dgMaster. Selecione-o e na guia de propriedades clique no link Property Builder, como mostrado abaixo:

 

 

Vá na guia Columns, expanda as opções de Button Column, selecione o botão do tipo Select e clique no botão adicionar. No campo Header Text escreva “Detalhes”. No campo Text escreva apenas o sinal “+”. No Button type escolha o tipo PushButton. Veja como ficou:

 

 

Clique em Ok.

 

Agora já estamos prontos para adicionar o código da aplicação.

 

Importe as seguintes classes.

 

System.Data

System.Data.OleDB

 

 

Declare a variável global que servirá para armazenar a string de conexão.

 

Public banco as string=”Provider=Microsoft.Jet.OleDb.4.0;Data Source=” & Server.MapPath(“Northwind.mdb”)

 

A primeira rotina a ser criada é a rotina PopulaMaster, que vai popular o Datagrid dgMaster assim que a página for carregada. Acompanhe o código detalhado desta rotina.

 

 

Analisando o código acima:

 

Dim strSql as new System.Text.StringBuilder()

 

Uma das novidades é o objeto StringBuilder. Ele é utilizado para concatenar strings de grande comprimento, com menos processamento. Para adicionar strings a este objeto, utiliza-se o método Append.

 

Dim adp as new OleDbDataAdapter(strSql.ToString(),conn)

 

O trecho acima cria um objeto do tipo DataAdapter, que serve para conectar a fonte de dados, através da consulta SQL. Sempre que for preciso preencher um Dataset com uma fonte de dados já existente, é necessário utilizar o DataAdapter.

 

Dim ds as new Dataset()

 

Instancia um novo objeto do tipo Dataset

 

adp.Fill(ds,"Pedidos")

 

O método Fill, do DataAdapter, serve para associar a consulta SQL a uma novatabela do Dataset. Para isso, é necessário informar o Dataset a ser utilizado e o nome da tabela que armazenará a consulta.

 

dgMaster.DataKeyField="NúmeroDoPedido"

dgMaster.DataSource=ds.Tables("Pedidos")

dgMaster.DataBind()

 

A propriedade DataKeyField do Datagrid permite associar a chave-primária da consulta. Utilizamos esta propriedade sempre que precisarmos fazer consultas através de dados relacionados, como este caso

 

A propriedade DataSource está vinculada à tabela Pedidos, que pertence ao Dataset ds.

 

Por fim, o Datagrid é renderizado na página através do método DataBind

 

Agora, vamos ao código da rotina PopulaDetalhes, acompanhe:

 

 

O código acima é muito parecido com o anterior. Vamos destacar apenas a um trecho:

 

If dgMaster.SelectedIndex>-1 then

 

Nestre trecho verificamos se existe algum registro selecionado no dgMaster, caso contrário, o código que está abaixo não será executado.

 

Devemos dar atenção para um detalhe. Esta rotina deve receber um parâmetro que será Número do Pedido do registro selecionado no dgMaster. Para chamarmos esta rotina, faça o seguinte:

 

Selecione o Datagrid dgMaster. Na guia de Propriedades, clique no botão Eventos e dê um duplo clique no evento SelectedIndexChanged. Adicione o seguinte código a este evento:

 

PopulaDetalhes(dgMaster.DataKeys(dgMaster.SelectedIndex))

 

Nesta linha estamos chamando a rotina PopularDetalhes, passando como parâmetro a chave-primária do dgMaster. Para isto, é utilizado o método DataKeys que é um Array, onde o registro selecionado do dgMaster é identificado pelo método SelectedIndex.

 

O dgMaster irá apresentar uma lista muito grande de pedidos, logo vêm a necessidade de fazer a paginação. Para quem estava acostumado a trabalhar com ASP, PHP, etc... a paginação de dados é encarada como um desafio. Já no ASP.Net, este processo é muito simplificado, uma vez que o Datagrid já veio preparado para resolver problemas deste tipo.

 

Selecione novamente o dgMaster, clique no botão Eventos da guia de Propriedades, e clique duas vezes sobre o eventos PageIndexChanged

 

Adicione o seguinte código a este método:

 

dgMaster.CurrentPageIndex=e.NewPageIndex()

PopulaMaster()

 

Utilizando somente estas duas linhas é possível fazer a paginação. Muito simples, não?

 

Para finalizar, só precisamos chamar a rotina que irá popular o dgMaster:

 

Sub Page_Load(sender As Object, e As EventArgs)

If Not Page.IsPostBack then

PopulaMaster()

End if

End Sub

 

Pressione F5 para testar:

 

Funcionou, e muito bem!!!

 

Para que não fique nenhum dúvida, vou postar aqui o código na íntegra!

 

<%@ Page Language="VB" Debug="True" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

Public banco as string="Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & Server.MapPath("Northwind.mdb")

 

Sub PopulaMaster()

 

'Cria a conexão com o banco

 

Dim conn as new OleDbConnection(banco)

 

'String de consulta que sera enviada ao banco de dados

 

Dim strSql as new System.Text.StringBuilder()

With strSql

.append("Select Pedidos.NúmeroDoPedido,")

.append("Pedidos.DatadeEntrega,")

.append("Clientes.NomeDaEmpresa ")

.append("From Pedidos,Clientes ")

.append("Where Clientes.CódigodoCliente=Pedidos.CódigodoCliente ")

.append("Order by Pedidos.NúmeroDoPedido")

End With

 

' Adaptador de dados

Dim adp as new OleDbDataAdapter(strSql.ToString(),conn)

 

'Cria o Dataset

Dim ds as new Dataset()

 

'Cria uma tabela chamada "Pedidos" com os dados da consulta enviada através do Adapter.

 

Adp.Fill(ds,"Pedidos")

 

'Anexa a chave primária ao Datagrid dgMaster e popula-o com os dados da tabela criada.

 

dgMaster.DataKeyField="NúmeroDoPedido"

dgMaster.DataSource=ds.Tables("Pedidos")

dgMaster.DataBind()

 

End Sub

 

Sub PopulaDetalhes(NumPedido as integer)

'Verifica se há algum registro selecionado no dgMaster

If dgMaster.SelectedIndex>-1 Then

 

'Cria a conexão com a fonte de dados

Dim conn as new OleDbConnection(banco)

 

'Cria a string de consulta Sql

Dim strSql as new System.Text.StringBuilder()

 

With strSql

.append("Select Produtos.NomeDoProduto,")

.append("DetalhesDoPedido.PreçoUnitário,")

.append("DetalhesDoPedido.Quantidade ")

.append("From Produtos,DetalhesDoPedido ")

.append("Where DetalhesDoPedido.NúmeroDoPedido="& NumPedido & " ")

.append("and Produtos.CódigoDoProduto=DetalhesDoPedido.CódigoDoProduto")

End With

 

'Cria o DataAdapter

Dim adp as new OleDbDataAdapter(strSql.ToString(),conn)

 

'Cria o Dataset

Dim ds as new Dataset()

 

'Popula o Dataset

adp.Fill(ds,"Produtos")

 

'Popula o Datagrid dgDetalhes

dgDetalhes.DataSource=ds.Tables("Produtos")

dgDetalhes.DataBind()

End if

 

End Sub

 

Sub Page_Load(sender As Object, e As EventArgs)

'Carrega a rotina apenas na primeira vez em que a página for executada.

If Not Page.IsPostBack then

PopulaMaster()

End if

End Sub

 

Sub dgMaster_SelectedIndexChanged(sender As Object, e As EventArgs)

'carrega a rotina passando a chave-primária como parâmetro.

PopulaDetalhes(dgMaster.DataKeys(dgMaster.SelectedIndex))

End Sub

 

Sub dgMaster_PageIndexChanged(sender As Object, e As DataGridPageChangedEventArgs)

'Pagina o dgMAster

dgMaster.CurrentPageIndex=e.NewPageIndex()

'Carrega a rotina após a paginação

PopulaMaster()

End Sub

 

The End

 

Lano de Castro

“Se não se pode vencer pelo talento, vença pelo esforço!”

Quer receber novidades e e-books gratuitos?

Cursos Online

  • Banco de Dados
  • Carreira
  • Criação/Web
  • Excel/Projetos
  • Formação
  • + Todas as categorias
  • Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

    Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

    Todos os direitos reservados, Júlio Battisti 2001-2020 ®

    [LIVRO]: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2010 - PASSO-A-PASSO

    APRENDA COM JULIO BATTISTI - 1124 PÁGINAS: CLIQUE AQUI