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!