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.SqlClientA seguir no início do formulário vamos declarar as variáveis : dv e cm , respectivamente do tipo DataView e CurrencyManager
Private dv As DataViewAgora 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.
|
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#