 VB.NET - Filtrando valores Nulos em um 
DataView
 
VB.NET - Filtrando valores Nulos em um 
DataView
Como filtrar um DataView de forma a tratar valores NULL ?
Este artigo vai usar a tabela Customers do banco de dados Northwind do SQL Server 2000. Abaixo temos a exibição no Enterprise Manager do banco de dados e da tabela :
|  | 
A estrutura da tabela Customers é exibida na figura abaixo e foi obtida também no Enterprise Manager do SQL Server:
|  | 
Exibindo os dados presentes na tabela temos o seguinte resultado:
|  | 
Note que o campo Region possui valores Null. Nosso objetivo e tratar estes valores em um DataTable/DataView de forma a saber como exibir somente os registros com valores Null para o campo Region e também como não exibir estes mesmos valores.
Vamos criar um novo projeto no VS.NET do tipo Windows Application usando a linguagem VB.NET e no formulário principal vamos incluir somente um botão de comando e um componente DataGrid para exibir os valores.
Como vamos acessar um banco de dados SQL Server temos que usar um import System.Data.SqlClient ; no inicio do formulário vamos declarar também uma constante com a string de conexão com o banco de dados SQL Server:
Public
conexaoSQLServer As String = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind"No evento Load do formulário vamos colocar o código que estabelece a conexão com o SQL Server e preenche o DataGrid, conforme abaixo:
| Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load      ' cria e preenche a tabela customers
Dim dt As New DataTable("Customers")
Dim da As New SqlDataAdapter("SELECT CustomerID,ContactName,City,Region,Country FROM Customers", conexaoSQLServer)        Try
            da.Fill(dt)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try' vincula o modo de visualização padrão ao grid DataGrid1.DataSource = dt.DefaultView End Sub | 
Agora no evento Click do botão de comando o código abaixo irá filtrar os dados para exibir somente os valores Null ou exibir somente os valores não Null.
| Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click         Dim filtro As String = "Region IS NULL"
        Dim dv As DataView = CType(DataGrid1.DataSource, DataView)
        If Button1.Text = "Exibir Somente Nulos" Then
            dv.RowFilter = filtro
            DataGrid1.CaptionText = "Tabela Customers : Campo Region is Null."
            Button1.Text = "Não Exibir Nulos"
        Else
            dv.RowFilter = "Region is Not NULL"
            DataGrid1.CaptionText = "Tabela Customers: Campo Region is Not NULL."
            Button1.Text = "Exibir Somente Nulos"
        End IfEnd Sub | 
Aqui estamos usando a cláusula IS NULL e IS NOT NULL para efetuar o tratamento exibindo os valores desejados.
Lembre-se que cada objeto DataTable possui um DataView padrão associado que podemos usar para filtrar a tabela usando critérios definidos.
A propriedade RowFilter de DefaultView é filtrada para linhas que contenham o campo Region com valores Null. Aplicando filtro o resultado se reflete imediatamente no DataGrid.
A linha de código a seguir merece uma atenção especial:
 Dim dv As DataView 
= CType(DataGrid1.DataSource, DataView)
nele estamos convertendo a fonte de dados do DataGrid para um 
DataView. Estamos 
efetuando um Cast usando Ctype.
Onde Ctype retorna o resultado de uma conversão explícita para um tipo de dados especificado , objeto , estrutura , classe ou interface.
A sintaxe é : CType(expression, typename)
Para saber mais leia o artigo : VB.NET - Casting : Ctype ou DirectCast.
O resultado da execução do projeto é exibido nas figuras abaixo:
|  | 
     | 
| Exibindo somente valores Null | Não exibindo valores Null | 
Você também poderia ter usado uma instrução SQL para obter diretamente um DataTable com ou sem valores Null para o campo Region:
1- Seleciona os registros da tabela Customers para Region com valor Null
| SELECT CustomerID,ContactName,City,Region,Country FROM Customers Where Region is Null | 
2- Seleciona os registros da tabela Customers para Region com valores NÃO Null
SELECT CustomerID,ContactName,City,Region,Country FROM Customers Where Region is Not Null
Neste caso o DataGrid já exibiria o resultado final sem necessitar realizar o filtro.
Eu sei é apenas VB.NET , mas eu 
gosto ...
José Carlos Macoratti