PESQUISA EM LISTVIEW

JMSGRILO 03/05/2013 17:34:40
#422914
Olá Pessoal!
Existe alguma forma de implementar uma pesquisa no listview ?
da seguinte forma:

Quanto estou digitando em um textbox já vai carregando o listview, ou seja, pesquisa letra a letra. Conforme vou digitando ele vai pesquisando.

Tenho esta função em um datagridview, mas não estou conseguindo fazer no listview.



KERPLUNK 03/05/2013 18:11:23
#422918
Use OOP, faça um List<T> e preencha o grid com essa lista, depois guarde essa lista em uma variável no form. Quando for consultar, consulte essa lista usando uma expressão lambda, criando uma nova lista para cada pesquisa para não alterar a massa de dados original e preencha o grid com o resultado da pesquisa.
MAXGUIMEL 06/05/2013 12:51:51
#423003
Resposta escolhida
[ô]Coloque essa função no seu form...

Citação:

Private Sub ProcurarItem()
Chave = [Ô][Ô]
Chave = [Ô]%[Ô] & TxtPesquisar.Text
If TxtPesquisar.Text = [Ô][Ô] Then
MessageBox.Show([Ô]Por Favor, Preencha o Campo Pesquisar![Ô], [Ô]..::Erro::..[Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
TxtPesquisar.Focus()
Exit Sub
End If
If TxtPesquisar.Text <> [Ô][Ô] And ListClientes.Items.Count > 0 Then
Dim lvItem As ListViewItem = ListClientes.FindItemWithText(TxtPesquisar.Text, False, 0, True)
ListClientes.Clear()
If (lvItem IsNot Nothing) Then
Try
FechaBanco()
[ô]Abre o Banco
AbreMySqlPrincipal()
OleCl = New MySqlCommand([Ô]SELECT * FROM Clientes Where Nome Like [ô][Ô] & Chave & [Ô]%[ô] ORDER BY Nome[Ô], AbreBanco)
Dim leitor As MySqlDataReader = OleCl.ExecuteReader
With ListClientes
[ô]Criando as Colunas
ListClientes.Columns.Add([Ô]Nome[Ô], 350, HorizontalAlignment.Left)
ListClientes.Columns.Add([Ô]Fone Fixo[Ô], 150, HorizontalAlignment.Center)
ListClientes.Columns.Add([Ô]Fone Comercial[Ô], 150, HorizontalAlignment.Center)
ListClientes.Columns.Add([Ô]Celular[Ô], 150, HorizontalAlignment.Center)
ListClientes.Columns.Add([Ô]Cidade[Ô], 300, HorizontalAlignment.Left)
ListClientes.Columns.Add([Ô]Codigo[Ô], 100, HorizontalAlignment.Right)
End With
Do While leitor.Read
Dim codigo1 As String = leitor.Item([Ô]NOME[Ô])
Dim ls As New ListViewItem(codigo1, 0)
ls.SubItems.Add(leitor.Item([Ô]FONE_FIXO[Ô]))
ls.SubItems.Add(leitor.Item([Ô]FONE_COMERCIAL[Ô]))
ls.SubItems.Add(leitor.Item([Ô]FONE_CELULAR[Ô]))
ls.SubItems.Add(leitor.Item([Ô]CIDADE[Ô]))
ls.SubItems.Add(leitor.Item([Ô]IDCLIENTE[Ô]))
ListClientes.Items.Add(ls)
pZebra(ListClientes, Color.Black, Color.WhiteSmoke) [ô]Rotina para zebrar ListView
Loop
leitor.Close()
Catch ex As SqlException
MessageBox.Show(ex.Message)
Finally
FechaMySql()
End Try
End If
Else
Try
FechaBanco()
[ô]Abre o Banco
AbreMySqlPrincipal()
OleCl = New MySqlCommand([Ô]SELECT * FROM Clientes Where Nome Like [ô][Ô] & Chave & [Ô]%[ô] ORDER BY Nome[Ô], AbreBanco)
Dim leitor As MySqlDataReader = OleCl.ExecuteReader
With ListClientes
[ô]Criando as Colunas
ListClientes.Columns.Add([Ô]Nome[Ô], 250, HorizontalAlignment.Left)
ListClientes.Columns.Add([Ô]Fone Fixo[Ô], 100, HorizontalAlignment.Center)
ListClientes.Columns.Add([Ô]Fone Comercial[Ô], 100, HorizontalAlignment.Center)
ListClientes.Columns.Add([Ô]Celular[Ô], 100, HorizontalAlignment.Center)
ListClientes.Columns.Add([Ô]Cidade[Ô], 300, HorizontalAlignment.Left)
ListClientes.Columns.Add([Ô]Codigo[Ô], 100, HorizontalAlignment.Right)
End With
Do While leitor.Read
Dim codigo2 As String = leitor.Item(0)
Dim ls As New ListViewItem(codigo2, 0)
ls.SubItems.Add(leitor.Item(5))
ls.SubItems.Add(leitor.Item(6))
ls.SubItems.Add(leitor.Item(7))
ls.SubItems.Add(leitor.Item(17))
ls.SubItems.Add(leitor.Item(21))
ListClientes.Items.Add(ls)
pZebra(ListClientes, Color.Black, Color.WhiteSmoke) [ô]Rotina para zebrar ListView
Loop
leitor.Close()
Catch ex As SqlException
MessageBox.Show(ex.Message)
Finally
FechaMySql()
End Try
End If
End Sub



Depois coloque essa rotina no evento changed do text de pesquisa:

Citação:

ListClientes.Clear()
ProcurarItem()

JMSGRILO 06/05/2013 15:47:08
#423012
Valeu MAXGUIMEL, obrigado pela ajuda.
Fiz algumas alterações e funcionou perfeitamente.
Tópico encerrado , respostas não são mais permitidas