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

Filtrando e organizando dados com DataView

Olá pessoal,

Temos hoje mais uma novidade no ASP.Net, o objeto DataView. O uso deste objeto é muito simples, e nos trás resultados muito produtivos. Imagine a seguinte situação: “Seu cliente necessita de um relatório de produtos onde  seleciona dados, aplica filtros, e ordena suas pesquisas”.

Isto não é uma missão impossível, até porque você tem a sua disposição os comandos SQL que fazem todo este trabalho sem problemas. Mas imagine, se esta empresa possui várias filiais, onde vários gerentes precisam ter acesso a este tipo de negócio.

Ir até a fonte de dados todas as vezes em que for necessário ter uma nova visão dos dados não seria a solução mais viável, pois, além da quantidade de dados que vão trafegar durante todo este processo, o próprio servidor do banco de dados estará sofrendo várias requisições com alto tráfego de informações, resumindo, provavelmente depois de um certo momento ele vai cair!”

Para resolver este e muitos outros probleminhas iguais a este, nós temos o DataView, que pelo nome já diz “Visão de Dados”.

Vou explicar e exemplificar algumas situações em que podemos aplicá-lo.

Crie um novo projeto chamado DataView. Neste projeto deve haver um arquivo chamado Relatorio.aspx, que é o arquivo que vamos utilizar para criar o DataView.

Abra o arquivo Relatório.aspx e insira um DataGrid com o nome dgProdutos. Formate-o como desejar.

É neste DataGrid que vamos exibir os dados do relatório.

Nossa fonte de dados será o Northwind do SQL Server, mas você pode utilizar outro, caso não tenha acesso a este.

Vamor criar a rotina que irá buscar os dados no servidor e armazená-los em um DataTable.

Primeiramente, você deve criar um DataSet do tipo público, de forma que seu conteúdo possa ser utilizado em várias rotinas da mesma página. Veja:

Você deve criar a seguinte linha de código:

public DataSet dsProdutos=new DataSet();

de acordo com a imagem acima.

Agora crie a seguinte rotina:

private void CarregarDados()

            {

                  ///Cria o objeto de conexão

                  SqlConnection sqlConn=new SqlConnection();

                  ///Indica o banco de dados a ser utilizado, o servidor, e os dados do usuário

                  ///Não esqueça de configurar esta linha de acordo com sua aplicação.

                  sqlConn.ConnectionString="Initial Catalog=Northwind;Data source=Master;User id=Lano;pwd=1234";

                  ///Cria o Adaptador de dados, selecionando todos os registros da tabela Produtos.

                  SqlDataAdapter sqlAdp=new SqlDataAdapter("Select * From Products",sqlConn);

                  ///Armazena os dados obtidos em uma tabela virtual chamado Produtos

                  sqlAdp.Fill(dsProdutos,"Produtos");

                  ///Transfere os dados do DataSet para a seção, a fim de utilizar os dados em outras rotinas.

                  Session["dsProdutos"]=dsProdutos;

            }

Bem, temos apenas uma novidade no seguinte trecho:

Session["dsProdutos"]=dsProdutos;

Com este trecho, utilizamos o objeto Session para manter o objeto DataSet com toda a sua estrutura e dados em seção, a fim de que possamos utilizá-lo em outras rotinas sem precisar carregar os dados a partir da fonte original.

Crie agora a seguinte rotina:

      private void GerarVisao()

            {

                  ///Cria o Dataview

                  System.Data.DataView dv=new System.Data.DataView(dsProdutos.Tables["Produtos"],"UnitPrice<10","UnitPrice",
DataViewRowState.CurrentRows);

                  ///anexa a visão criada ao DataGrid

                  dgProdutos.DataSource=dv;

                  ///exibe os dados no DataGrid

                  dgProdutos.DataBind();

            }

Acho que já deu pra perceber o quanto foi simples. Criamos o DataView passando os seguintes argumentos:

new System.Data.DataView(Tabela do DataSet a ser utilizada,Filtro a ser aplicado,Coluna que ordenará, RowState da fonte de dados);

No exemplo acima, estamos criando uma visão de todos os produtos com preço menor que 10 dólares, e ordenando pelo próprio preço dos produtos, utilizando os registros correntes (CurrentRows).

Tente executar a página para ver os dados, mas antes chame as rotinas da seguinte forma:

private void Page_Load(object sender, System.EventArgs e)

            {

                  CarregarDados();

                  GerarVisao();

            }

Vejam como funcionou:

Agora que já sabemos como utilizar, seria uma boa aperfeiçoar este relatório.

Insira os controles, conforme a imagem abaixo:

O primeiro dropDownList chama-se dropCampos, que listará os campos da tabela. O segundo chama-se dropOperadores que indica o operador que será utilizado na consulta. Este dropDownList deve ser preenchido em tempo de criação, utilizando a guia de propriedades na opção Items. Você deve adicionar os valores “=”,”<>”,”<”,”>” para este DropDownList. O textBox ao lado, chama-se txtPesquisa, que informará o valor da chave de pesquisa, e mais um botão que executará o comando de pesquisa.

Após realizar as operações acima, vamos ao código que carregará o nome dos campos para o dropCampos. Na verdade, não vamos criar uma rotina nova, vamos apenas adicionar um pequeno trecho de código a rotina CarregarDados() que já existe em nosso projeto. A rotina CarregarDados() agora ficou assim:

private void CarregarDados()

            {

                  ///Cria o objeto de conexão

                  SqlConnection sqlConn=new SqlConnection();

                  ///Indica o banco de dados a ser utilizado, o servidor, e os dados do usuário

                  ///Não esqueça de configurar esta linha de acordo com sua aplicação.

                  sqlConn.ConnectionString="Initial Catalog=Northwind;Data source=Master;User id=Lano;pwd=1234";

                  ///Cria o Adaptador de dados, selecionando todos os registros da tabela Produtos.

                  SqlDataAdapter sqlAdp=new SqlDataAdapter("Select * From Products",sqlConn);

                  ///Armazena os dados obtidos em uma tabela virtual chamado Produtos

                  sqlAdp.Fill(dsProdutos,"Produtos");

                  ///Transfere os dados do DataSet para a seção, a fim de utilizar os dados em outras rotinas.

                  Session["dsProdutos"]=dsProdutos;

                  ///Variável contadora para interagir com o DataTable

                  int x;

                  ///Repetição para preencher o dropCampos com o nome das colunas

                  for(x=0;x<dsProdutos.Tables["Produtos"].Columns.Count;x++)

                  {

                        ///adicionando cada coluna, a cada vez que o loop é executado.

dropCampos.Items.Add(dsProdutos.Tables["Produtos"].Columns[x].ColumnName);

                  }

            }

Para aproveitar o trabalho que já foi anteriormente, vamos fazer algumas alterações na rotina GerarVisao(), que receberá alguns parâmetros para que possa ser executada adequadamente:

private void GerarVisao(string NomeDaColuna,string Operador,object Pesquisa)

            {

                  ///Cria o Dataview

                  System.Data.DataView dv=new System.Data.DataView(dsProdutos.Tables["Produtos"],NomeDaColuna + Operador + Pesquisa,NomeDaColuna,DataViewRowState.CurrentRows);

                  ///anexa a visão criada ao DataGrid

                  dgProdutos.DataSource=dv;

                  ///exibe os dados no DataGrid

                  dgProdutos.DataBind();

            }

Para finalizar, falta apenas chamar a rotina GerarVisao() através do evento click do botão que incluímos. Não esqueça de passar os parâmetros:

private void Button1_Click(object sender, System.EventArgs e)

            {

GerarVisao(dropCampos.SelectedItem.Text,dropOperadores.SelectedItem.Text,
txtPesquisa.Text);

           }

Vamos testar nosso projeto:

Executando a consulta:

Vejam que o critério foi respeitados, todos os produtos listados, tem o preço maior que 50 dólares, e também estão ordenados do menor preço para o maior.

Vamos a mais um teste:

Como estou consultando um valor do ripo string, coloquei o nome do produto entre aspas simples.

Executando a consulta:

Muito bom, vejam que o produto que eu procurava foi localizado.

O último para terminar:

Neste caso eu posso utilizar tanto True/False ou 1/0.

Muito bem, aqui termina o nosso tutorial. Espero que tenham gostado da novidade.

Mandem sugestões para lanodecastro@hotmail.com

Conto com vocês!

Lano de Castro

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