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