
O objetivo deste Tutorial é mostrar como utilizar o objeto DataView para classificar e filtrar dados, um recurso muito utilizando nas aplicações que manipulam dados. Para entender este tutorial você precisa ter conhecimentos em Visual Basic.NET e ADO.NET (para saber mais sobre isso consulte os Tutoriais "Mudanças do ADO para o ADO.NET" e "Acesso a dados com o VB.NET") e noções de instruções SQL.
Softwares utilizados :
- Microsoft Visual Studio.NET 2003 Enterprise Architect (também conhecido como "Everett" ou versão 7.1) - Beta Final
- Microsoft SQL Server 2000 Enterprise Edition
Requisitos do sistema:
- Processador Intel Pentium II /AMD K6-2 a partir de 450 Mhz (Pentium III/AMD Duron a partir de 600 Mhz recomendados)
- Memória RAM: 96 Mb para Windows 2000 Pro (recomendado 128 Mb), 192 Mb para Windows 2000 Server (recomendado 256 MB), 96 Mb para Windows XP Home (recomendado 160 Mb) e 192 Mb para Windows XP Pro/Windows Server 2003 (recomendado 256 Mb)- 4.1 GB no drive da instalação e 900 Mb no drive do sistema;
- Sistema Operacional: Windows 2000*, Windows XP ou Windows Server 2003 (é possível executar aplicações desenvolvidas com o VS.NET no Windows 98/Me/NT 4 mas não é possível desenvolver as aplicações nesses sistemas). * o Windows 2000 Datacenter Server não é suportado.
- Drive de CD-ROM ou DVD-ROM
- Internet Explorer 5.0 ou superior
- Placa de vídeo e monitor que suporte resolução de 800x600 e 256 cores (Recomendado High Color 16-Bit)
- Mouse
O objeto DataView
O objeto DataView é parte da arquitetura do ADO.NET: ele representa uma "visão" (é muito semelhante as objetos View de bancos de dados como o SQL Server) de um DataTable para navegação, classificação, filtragem e busca. O DataView se difere de uma View de banco de dados por não poder ser tratado como uma tabela ou ser preenchida por um comando JOIN, ou seja, deve haver um DataView para cada tabela e também pelo fato do DataView poder alterar os dados do DataTable ao qual pertence.
Ele possui muitas funcionalidades além da filtragem, classificação, navegação e busca, como por exemplo, poder mostrar os dados em estados diferentes: você pode criar um form com dois DataGrid, um ligado a um DataView que mostra os dados no estado atual e outro ligado a um DataView que mostra todos os dados apagados na transação atual.
Primeiramente abra o Visual Studio.NET e crie uma nova aplicação "Windows Application" em "Visual Basic Projects":

New Project
Vamos montar nosso form: arraste um Button ("btnOK"), um DataGrid ("Grid"), um Textbox ("txtFiltro") e um Combobox ("cmbClass"). Veja como ficará o layout do form:

Layout do form
No "txtFiltro" será estabelecido o filtro que será utilizado e no combo "cmbClass" escolheremos a classificação Crescente ou Decrescente (note que a ordenação será feita sempre pelo campo "CustomerID" e o filtro será aplicado no campo CompanyName). Ao clicar no botão OK, aplicaremos o filtro e ordenação ao objeto DataView e atualizaremos o Grid. Se o "txtFiltro" estiver vazio aplicaremos somente a ordenação. Selecione o "cmbClass" e na janela Properties apague qualquer conteúdo da propriedade Text, em seguida selecione a propriedade Items e clique no botão "..." ao lado da mesma. Será apresentada a janela "String Collection Editor", onde colocaremos os itens disponíveis:

Itens do ComboBox "cmbClass"
Vamos criar os objetos para acesso a dados: crie um SqlConnection ("Conexao") que se conecta ao banco Northwind do SQL Server 2000. Adicione também um SqlDataAdapter ("Adapter"), que é preenchido com a seguinte query SQL: "SELECT CustomerID, CompanyName FROM Customers". Veja a área de componentes invisíveis em tempo de execução com os objetos criados:

Objetos criados
Agora daremos funcinalidade ao form adicionando código. Adicione na primeira linha do código, antes de qualquer coisa, a seguinte linha:
Imports System.Data.SqlClient
Logo abaixo da linha "Inherits System.Windows.Forms.Form" digite:
Dim dvCustomers As DataView 'cria objeto DataView
Dim dsCustomers As New DataSet 'cria objeto DataSet
Agora adicione o seguinte código no evento Form1_Load:
Conexao.Open()
Adapter.Fill(dsCustomers, "Customers")
Conexao.Close()
System.Data.DataView(dsCustomers.Tables("Customers"), _
"CompanyName like '%'", "CustomerID ASC", _
DataViewRowState.OriginalRows)
Grid.DataSource = dvCustomers
Grid.CaptionText = "Qtde: " & dvCustomers.Count.ToString 'mostra a qtde de registros no caption do DataGrid
Atenção para a sintaxe da criação do DataView:
dvCustomers = New System.Data.DataView (tabela, filtro, ordenação, estAado da tabela)
Estabelecemos os filtro para que pegue todos os registros, e a ordenação pelo campo CustomerID Crescente (ASC), o estado é o original (OriginalState). Agora clique duas vezes sobre o botão btnOK e vamos inserir o código para o evento btnOK_Click:
Dim Filtro As String
If txtFiltro.Text.Trim <> "" Then 'testa se o campo não está vazio
Filtro = "CompanyName LIKE '" & txtFiltro.Text & "%'"
dvCustomers.RowFilter = Filtro 'aplica o filtro
If cmbClass.Text = "Crescente" Then 'testa a ordenação
dvCustomers.Sort = "CustomerID ASC"
Else
dvCustomers.Sort = "CustomerID DESC"
End If
Else 'se o filtro estiver vazio, só faz a ordenação
If cmbClass.Text = "Crescente" Then
dvCustomers.Sort = "CustomerID ASC"
Else
dvCustomers.Sort = "CustomerID DESC"
End If
End If
Grid.DataSource = dvCustomers
Grid.CaptionText = "Qtde: " & dvCustomers.Count.ToString
End Sub
Note que os filtros que estabelecemos possuem o sinal "%" no final da expressão: ele serve como um coringa (que é o * em nomes de arquivos, por exemplo), estabelecendo que o filtro é o texto do nosso TextBox e qualquer outra coisa depois. Agora vamos executar nosso programa. Veja abaixo as possibilidades existentes:

Estado normal ao executar o form
Aplicando ordenação Decrescente
Aplicando ordenação Crescente
Aplicando um filtro e ordenação Crescente
Aplicando um filtro e ordenação Decrescente
Conclusão
A utilização do objeto DataView é muito útil quando queremos apenas fazer uma consulta a uma fonte de dados e nos permite filtrar os dados da maneira que quisermos e ordená-los de acordo com a escolha do usuário. Com esses recursos é possível criar-se consultas personalizadas com diversas opções de filtragens em vários campos de uma tabela, isso fica a critério do desenvolvedor e das necessidades do cliente.
Marcas Registradas
Visual Basic.NET, Visual Studio.NET, Windows, SQL Server são marcas registradas da Microsoft Corporation.
Todos os demais nomes registrados, marcas registradas ou direitos de uso citados neste TM pertencem a seus respectivos proprietários.
Autor original: ClawHammer
Direitos Autorais: BABOO
