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: PrincipalArtigosNet : Dataset001
Quer receber novidades e e-books gratuitos?

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!”

1 Visão geral do .NET Framework e do CLR
1 Comunicação .NET e VB 6.0 (com Visual Studio.NET 2005) - Parte I
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 1
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 2
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 3
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 4
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 5
1 VB: Menu Principal, Menu PopUp e Arquivos Texto
Visual Studio
1 ASP.NET 2.0 - Conhecendo o ObjectDataSource Control
1 Visual Web Developer - 2005 - Beta 2 - Introdução
1 ASP.NET 2.0 - Conhecendo o GridView
1 ASP.NET 2.0 - Utilizando o GridView e DetailsView
1 ASP.NET 2.0 - Conhecendo o ObjectDataSource Control - Parte 2
1 ASP.NET 2.0 - Utilizando o XmlDataSource
1 Envio de e-mail através de formulário web
1 ADO.NET 2.0 - Conhecendo as novidades parte 1
1 Série Visual Source Safe - Parte 1
1 Série Visual Source Safe - Parte 3
1 URL Indexável – Reescrever URL de uma forma amigável
1 Permissão de Página Utilizando Web.Config
1 Usando public interface
1 Trabalhando com o componente TabContainer
1 Adicionando Menu no DataGridView
ASP.NET
1 Conhecendo o ambiente integrado do WebMatrix
1 Desenvolvendo aplicações ASP.NET no WebMatrix - WebControls – Parte I
1 Desenvolvendo aplicações ASP.NET no WebMatrix - WebControls – Parte II
1 Desenvolvendo aplicações ASP.NET no WebMatrix - WebControls – Parte III
1 Acessando um banco de dados facilmente com ADO.Net e Datagrid
1 Desvendando os segredos do Dataset- Parte I
1 Construindo um Sistema de Publicação de Notícias – Parte 1
1 Construindo um Sistema de Publicação de Notícias – Parte 2
1 Construindo um Sistema de Publicação de Notícias – Parte 3
1 Construindo um Sistema de Publicação de Notícias – Parte 4
1 Construindo um Sistema de Publicação de Notícias – Parte 5
1 Login com Perfil de Acesso
1 Guest Book com XML - Parte 1
1 Guest Book com XML - Parte 2
1 Agendando Datas no Calendário com XML
1 Filtrando e Organizando Dados com o Controle DataView
1 Lista de Dados com Subitens – Parte 1
1 Lista de Dados com Subitens – Parte 2
1 Trabalhando com Arquivos e Diretórios – Parte 1
1 Trabalhando com Arquivos e Diretórios – Parte 2
1 Trabalhando com Arquivos e Diretórios – Parte 3
1 Sistema de Enquetes baseado em WebServices – Parte 1
1 Sistema de Enquetes baseado em WebServices – Parte 2
1 Sistema de Enquetes baseado em WebServices – Parte 3
1 Upload de Arquivos
1 Crie seu próprio código de verificação
1 Login e Senha com FormsAuthentication – Parte 1
1 Login e Senha com FormsAuthentication – Parte 2
1 Sistema de Enquetes baseado em WebServices – Parte 4
1 Sistema de Enquetes baseado em WebServices – Parte 5
1 Sistema de Enquetes baseado em WebServices – Parte 6