Sie sind auf Seite 1von 6

Desvendando os segredos do Dataset Parte I

Ol Pessoal, Mais novidades para vocs. 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 memria, o que permite uma melhor dinmica no gerenciamento e controle de grande quantidade de dados. Um nico Dataset permite adicionar vrias 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 atravs do prprio cdigo. A nossa seqncia de tutoriais sobre Dataset ir abordar estes dois modos. Objetivo : O objetivo deste tutorial mostrar como construir uma aplicao com acesso a dados atravs do ADO.net e controle de dados atravs 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 aplicao exibiremos os pedidos no dgMaster e os detalhes destes pedidos, como os produtos que pertencem a cada pedido, sero exibidos no dgDetalhes. Para isto teremos que incluir um boto de seleo ao dgMaster. Selecione-o e na guia de propriedades clique no link Property Builder, como mostrado abaixo:

V na guia Columns, expanda as opes de Button Column, selecione o boto do tipo Select e clique no boto 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 cdigo da aplicao. Importe as seguintes classes. System.Data System.Data.OleDB

Declare a varivel global que servir para armazenar a string de conexo. Public banco as Server.MapPath(Northwind.mdb) string=Provider=Microsoft.Jet.OleDb.4.0;Data Source= &

A primeira rotina a ser criada a rotina PopulaMaster, que vai popular o Datagrid dgMaster assim que a pgina for carregada. Acompanhe o cdigo detalhado desta rotina.

Analisando o cdigo 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 mtodo 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, atravs da consulta SQL. Sempre que for preciso preencher um Dataset com uma fonte de dados j existente, necessrio utilizar o DataAdapter. Dim ds as new Dataset() Instancia um novo objeto do tipo Dataset adp.Fill(ds,"Pedidos") O mtodo Fill, do DataAdapter, serve para associar a consulta SQL a uma novatabela do Dataset. Para isso, necessrio informar o Dataset a ser utilizado e o nome da tabela que armazenar a consulta. dgMaster.DataKeyField="NmeroDoPedido" dgMaster.DataSource=ds.Tables("Pedidos") dgMaster.DataBind()

A propriedade DataKeyField do Datagrid permite associar a chave-primria da consulta. Utilizamos esta propriedade sempre que precisarmos fazer consultas atravs de dados relacionados, como este caso A propriedade DataSource est vinculada tabela Pedidos, que pertence ao Dataset ds. Por fim, o Datagrid renderizado na pgina atravs do mtodo DataBind Agora, vamos ao cdigo da rotina PopulaDetalhes, acompanhe:

O cdigo 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 contrrio, o cdigo que est abaixo no ser executado. Devemos dar ateno para um detalhe. Esta rotina deve receber um parmetro que ser Nmero do Pedido do registro selecionado no dgMaster. Para chamarmos esta rotina, faa o seguinte: Selecione o Datagrid dgMaster. Na guia de Propriedades, clique no boto Eventos e d um duplo clique no evento SelectedIndexChanged. Adicione o seguinte cdigo a este evento: PopulaDetalhes(dgMaster.DataKeys(dgMaster.SelectedIndex)) Nesta linha estamos chamando a rotina PopularDetalhes, passando como parmetro a chave-primria do dgMaster. Para isto, utilizado o mtodo DataKeys que um Array, onde o registro selecionado do dgMaster identificado pelo mtodo SelectedIndex. O dgMaster ir apresentar uma lista muito grande de pedidos, logo vm a necessidade de fazer a paginao. Para quem estava acostumado a trabalhar com ASP, PHP, etc... a paginao 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 boto Eventos da guia de Propriedades, e clique duas vezes sobre o eventos PageIndexChanged Adicione o seguinte cdigo a este mtodo: dgMaster.CurrentPageIndex=e.NewPageIndex() PopulaMaster() Utilizando somente estas duas linhas possvel fazer a paginao. Muito simples, no? 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 no fique nenhum dvida, vou postar aqui o cdigo na ntegra! <%@ <%@ <%@ <script Page import import Language="VB" Debug="True" Namespace="System.Data" Namespace="System.Data.OleDb" %> %> %> runat="server">

Public banco as string="Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & Server.MapPath("Northwind.mdb") Sub PopulaMaster() 'Cria a conexo 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.NmeroDoPedido,") .append("Pedidos.DatadeEntrega,") .append("Clientes.NomeDaEmpresa ") .append("From Pedidos,Clientes ") .append("Where Clientes.CdigodoCliente=Pedidos.CdigodoCliente ") .append("Order by Pedidos.NmeroDoPedido") 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 atravs do Adapter.

Adp.Fill(ds,"Pedidos") 'Anexa a chave primria ao Datagrid dgMaster e popula-o com os dados da tabela criada. dgMaster.DataKeyField="NmeroDoPedido" 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 conexo 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.PreoUnitrio,") .append("DetalhesDoPedido.Quantidade ") .append("From Produtos,DetalhesDoPedido ") .append("Where DetalhesDoPedido.NmeroDoPedido="& NumPedido & " ") .append("and Produtos.CdigoDoProduto=DetalhesDoPedido.CdigoDoProduto") 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 pgina 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-primria como parmetro. 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 aps a paginao PopulaMaster() End Sub The End Lano de Castro Se no se pode vencer pelo talento, vena pelo esforo!

Das könnte Ihnen auch gefallen