VB.NET - Localizando dados em um DataGrid

 

Como usar um critério de busca definido pelo usuário para localizar dados exibidos em um controle DataGrid ? (Não vale usar SQL e executar uma consulta no banco de dados)

 

O cenário :

 

1- Você usou um DataGrid para exibir os dados que foram obtidos da tabela Customers do banco de dados Northwind do SQL Server 2000.

 

2- Agora você precisa selecionar dados usando um critério que o usuário deverá informar para selecionar determinados registros exibidos no DataGrid sem usar uma instrução SQL

 

Resolvendo o problema

 

Para resolver o problema vamos criar um novo projeto no VS.NET do tipo Windows Application usando a linguagem VB.NET.

No formulário padrão insira o seguintes controles : 1 DataGrid , 1 Label , 1 TextBox e 1 Button (ver figura abaixo)

 

 

Vamos declarar o imports para usar o namespace System.Data.SqlCLient

Imports System.Data.SqlClient

A seguir no início do formulário vamos declarar as variáveis : dv e cm , respectivamente do tipo DataView e CurrencyManager

Private dv As DataView
Private cm
As CurrencyManager

Agora no evento Load do formulário inclua o código abaixo:

 

Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ' cria o DataAdapter e carrega os dados do cliente na tabela
        Dim sqlText As [String] = "SELECT * FROM Customers"
        Dim conexaoSQL As String = "server=(local);trusted_connection=true;database=Northwind;Integrated Security=SSPI"

        Dim da As New SqlDataAdapter(sqlText, conexaoSQL)

        Dim dt As New DataTable

        Try
            da.Fill(dt)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        ' cria uma visao da visao padrao para a tabela
        dv = dt.DefaultView
        'ordena pelo codigo do cliente -CustomerID
        dv.Sort = "CustomerID"
        ' vincula a visao ao grid
        dgLocaliza.DataSource = dv

        ' obtem o CurrencyManager para o banco de dados
        cm = CType(dgLocaliza.BindingContext(dv), CurrencyManager)
    End Sub

 

 

Este código acessa a tabela Customers e preenche o DataGrid exibindo os dados ordenados pelo código do cliente (coluna CustomerID).


1- Estou criando um DataTable e preenchendo-o com os dados da tabela Customers do banco de dados Northwind.

2- A seguir crio um DataView baseado na View default do DataTable Customers.

3- A chave para ordenação é definida como sendo a coluna CustomerID.

4- Vinculo o DataView ao DataGrid.

 

Vamos agora criar o código do evento Click do botão - Localizar:

 


    
    Private Sub btnLocaliza_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLocaliza.Click

        If txtCriterio.Text <> "" Then
            ' localiza o cliente
            Dim i As Integer = dv.Find(txtCriterio.Text)
            If i < 0 Then
                ' nao foi localizado
                MessageBox.Show("Nenhum registro foi encontrado.", "Find", MessageBoxButtons.OK, MessageBoxIcon.Information)
                ' reposiciona o registro no grid usando o CurrencyManager
            Else
                cm.Position = i
            End If
        Else
            MessageBox.Show("Enter find criteria.", "Find", MessageBoxButtons.OK, MessageBoxIcon.Question)
            txtCriterio.Focus()
        End If
    End Sub

 

 

Neste código estou verificando se o usuário informou o  critério na caixa de texto.

Se o critério foi informado então eu utilizo o método Find do objeto DataView .A sintaxe usada é :  DataView.Find()


O método Find localiza uma linha em um DataView usando os valores definidos como critério de busca.

 

O método retorna o índice da linha no DataView contendo o valor da chave de ordenação definida, se a chave não existe retorna Null.

 

Assim a linha de código :

Dim i As Integer = dv.Find(txtCriterio.Text)

irá retornar o índice da linha encontrada no Dataview. Em seguida utilizo a propriedade Position de CurrencyManager para posicionar o ponteiro na linha do DataGrid.

 

Vamos falar um pouco do objeto CurrencyManager usado neste código:
 

O objeto CurrencyManager é fundamental para a arquitetura de vinculação de dados nos Windows Forms. Através do seus métodos , propriedades e eventos o objeto CurrencyManager gerencia a vinculação entre a fonte de dados e os controles que exibem dados da fonte de dados.

 

As propriedades expostas pelo objeto são mostradas na tabela abaixo. Com exceção da propriedade Position , todas são somente leitura.

 

Propriedade Descrição
Bindings A coleção de objetos Binding sendo geranciado pelo  CurrencyManager
Count O número de linhas gerenciadas pelo  CurrencyManager
Current O valor do objeto atual na fonte de dados
List A lista gerenciada pelo  CurrencyManager
Position Obtêm ou define o item atual na lista gerenciada pelo CurrencyManager

 

A linha de código :


cm.Position = i

 

Posiciona o ponteiro na linha selecionada no DataGrid. Executando o projeto e indicando um código de cliente , após a execução temos:

 

Eu sei é apenas VB.NET , mas eu gosto ...

Romanos 7:14 Porque bem sabemos que a lei é espiritual; mas eu sou carnal, vendido sob o pecado.

Romanos 7:15 Pois o que faço, não o entendo; porque o que quero, isso não pratico; mas o que aborreço, isso faço.

Romanos 7:16 E, se faço o que não quero, consinto com a lei, que é boa.

Romanos 7:17 Agora, porém, não sou mais eu que faço isto, mas o pecado que habita em mim.

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti