Olá pessoal, neste artigo irei mostrar como filtrar dados usando o objeto DataView. Acompanhem:

Para quem não sabe, o DataView é um objeto do ADO.NET que nos permite filtrar, ordenar, pesquisar e navegar pelos dados oferecendo diversos tipos de visões de um mesmo conjunto de dados ao usuário. Usamos um (ou mais) DataView para filtrar os dados contidos em um DataTable.

PS: Para mais informações sobre o DataList, recomendo a leitura deste link.

Para este artigo, usei o banco de exemplo da Microsoft, Northwind. Para quem quiser baixá-lo, é só seguir as instruções neste link ou neste artigo.

Como dito anteriormente, posso ter N DataViews para um mesmo DataTable.

Abra o Visual Studio, vá em File > New WebSite (SHIFT + ALT + N), dê o nome FiltrandoDadosDataView e clique em OK. Neste exemplo usaremos um DataSet Tipado.

Então, no Solution Explorer (CTRL + W + S) adicione um DataSet e dê o nome a ele de dsDados.xsd. Clique em OK e em Sim para armazenar este DataSet na pasta App_Code.


Agora abra o Server Explorer (CTRL + W + L), abra o banco NorthWind, abra a aba Views e arraste a View Products By Category, como a imagem abaixo ilustra, para o DataSet:


OBS: Para saber mais sobre Views, recomendo a leitura deste artigo.

Clique com o botão direito nesta View que foi arrastada e clique em Configure, altere a instrução para que não nos retorne a coluna Discontinued, já que não vamos usá-la neste exemplo:


Como você pode ver abaixo retornaremos o nome da categoria, do produto, a quantidade por unidade e as unidades em estoque.


Agora vá a Default.aspx, arraste da ToolBox dois GridViews, dê o ID a eles de dgvUm e dgvDois e altere a formatação de ambos:


Diferenciei o layout dos Grids porque iremos popular o primeiro grid com os dados de uma categoria e o segundo com os dados de outra categoria.

Para fazer isso, vá à página de códigos desta página para criar o método abaixo:

Antes, adicione os namespaces e a chamada ao TableAdapter do DataSet:

using System.Data;

using dsDadosTableAdapters;

Agora sim, crie o seguinte método:

private void PopulaGrids()

    {

        try

        {

            //Instancio o TableAdapter e o DataTable da minha View

            Products_by_CategoryTableAdapter ta = new Products_by_CategoryTableAdapter();

            dsDados.Products_by_CategoryDataTable dt = new dsDados.Products_by_CategoryDataTable();

 

            //Preencho meu TableAdapter passando como parâmetro o DataTable instanciado

            ta.Fill(dt);

 

            //Instancio meu objeto DataView, que recebe meu DataTable com o método DefaultView

            DataView dvUm = dt.DefaultView;

            //Uso a propriedade RowFilter, que é o filtro de meu DataView (equivalente ao Where do SQL Server)

            dvUm.RowFilter = "CategoryName = 'Condiments'";

           

            //O DataSource do meu GridView 1 recebe o DataView com o método ToTable, finalizo com o DataBind

            dgvUm.DataSource = dvUm.ToTable();

            dgvUm.DataBind();

 

            //Faço o mesmo com o 2º GridView, a diferença é que agora uso outro filtro

 

            DataView dvDois = dt.DefaultView;

            dvUm.RowFilter = "UnitsInStock > 100";

 

            dgvDois.DataSource = dvDois.ToTable();

            dgvDois.DataBind();

        }

        catch (Exception ex)

        {

            throw new Exception(ex.Message);

        }

    }

Os comentários acima já explicam o que faz o método, mais é importante citar a propriedade RowFilter, que é o filtro que quero usar em meu GridView e o método ToTable, que retorna um DataTable, sendo assim excelente para ser usado como DataSource do GridView.

No Page_Load faça a verificação: se não for PostBack (para que o Grid não seja populado toda hora) faça a chamada ao método recém-criado:

protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            PopulaGrids();

        }

    }

Na próxima parte de nosso artigo veremos a conclusão deste exemplo, criaremos ainda outra página com mais exemplos usando diversos tipos de filtros.

Não perca!