Você está na página 1de 4

VB.

NET - Localizando dados em um DataGrid


Como usar um critrio de busca definido pelo usurio para localizar dados exibidos em um controle DataGrid ? (No vale usar SQL e executar uma consulta no banco de dados) O cenrio : 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 critrio que o usurio dever informar para selecionar determinados registros exibidos no DataGrid sem usar uma instruo 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 formulrio padro 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 incio do formulrio vamos declarar as variveis : dv e cm , respectivamente do tipo DataView e CurrencyManager Private dv As DataView Private cm As CurrencyManager

Agora no evento Load do formulrio inclua o cdigo 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 cdigo acessa a tabela Customers e preenche o DataGrid exibindo os dados ordenados pelo cdigo 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 ordenao definida como sendo a coluna CustomerID. 4- Vinculo o DataView ao DataGrid. Vamos agora criar o cdigo do evento Click do boto - 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 cdigo estou verificando se o usurio informou o critrio na caixa de texto. Se o critrio foi informado ento eu utilizo o mtodo Find do objeto DataView .A sintaxe usada : DataView.Find() O mtodo Find localiza uma linha em um DataView usando os valores definidos como critrio de busca. O mtodo retorna o ndice da linha no DataView contendo o valor da chave de ordenao definida, se a chave no existe retorna Null. Assim a linha de cdigo : 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 cdigo: O objeto CurrencyManager fundamental para a arquitetura de vinculao de dados nos Windows Forms. Atravs do seus mtodos , propriedades e eventos o objeto CurrencyManager gerencia a vinculao entre a fonte de dados e os controles que exibem dados da fonte de dados. As propriedades expostas pelo objeto so mostradas na tabela abaixo. Com exceo da propriedade Position , todas so somente leitura. Propriedade Descrio Bindings Count Current List Position A coleo de objetos Binding sendo geranciado pelo CurrencyManager O nmero de linhas gerenciadas pelo CurrencyManager O valor do objeto atual na fonte de dados A lista gerenciada pelo CurrencyManager Obtm ou define o item atual na lista gerenciada pelo CurrencyManager

A linha de cdigo : cm.Position = i

Posiciona o ponteiro na linha selecionada no DataGrid. Executando o projeto e indicando um cdigo de cliente , aps a execuo temos:

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

Jos Carlos Macoratti

Você também pode gostar