1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Pesquisa em listview

Discussão em 'Programação' iniciada por redshot, 31 de Março de 2008. (Respostas: 11; Visualizações: 3501)

  1. redshot

    redshot Electromoderator
    Staff Member

    Boas. Como é que se faz uma pesquisa numa listview, do género de se carregar numa tecla e só aparecem os itens cujo nome começa por essa letra, e vai filtrando? Tal como a pesquisa de programas do iniciar do Vista.
     
  2. balute

    balute Power Member

    Supondo que tens uma colecção de itens onde procurar, fazes um ciclo que percorre todos os itens e adicionas à listview aqueles que verificarem a condição de pesquisa.
     
  3. filipemm

    filipemm Power Member

    Dica: Usa a função InStr

    MSDN:
    InStr

    Description

    Returns the position of the first occurrence of one string within another.
    Syntax

    InStr([Start, ]string1, string2[, compare])

    Start - Optional. Numeric expression that sets the Starting position for each search. If omitted, search begins at the first character position. If Start contains Null, an error occurs. The Start argument is required if compare is specified.
    string1 - Required. String expression being searched.
    string2 - Required. String expression searched for.
    compare - Optional. Numeric value indicating the kind of comparison to use when evaluating substrings. See Settings section for values. If omitted, a binary comparison is performed.
     
    Última edição: 2 de Abril de 2008
  4. jpaulino

    jpaulino Power Member

    Numa listview não é nada fácil (aliás bastante dificil e demorado mesmo).

    Uma coisa é procurar uma palavra ou filtrar de acordo com uma palavra. Mas para isso tens de explicar melhor o que queres e como queres.

    E é em que versão de VB ?

    fmorais90
    InStr é só para pesquisar texto numa string e o listview já tem algumas funções para isso tipo Me.ListView1.FindItemWithText("TextoProcurar") ... caso seja VB.NET !!!
     
  5. filipemm

    filipemm Power Member

    Certo... mas por acaso fiz há pouco tempo um projecto em VB6 e usei o InStr...
    Funciona perfeitamente...

    Código:
    Private Sub txtPesquisa_Change()
         Listar_Clientes
         If txtPesquisa.Text <> "" Then
              x = 1
              y = lstClientes.ListItems.Count
              While (x <= y)
                   If ((optNome.Value = True) And ((InStr(UCase(lstClientes.ListItems.Item(x)), UCase(txtPesquisa.Text)) > 0))) Then GoTo Fim
                   If ((optNIF.Value = True) And ((InStr(lstClientes.ListItems.Item(x).ListSubItems.Item(1), Val(txtPesquisa.Text)) > 0))) Then GoTo Fim
                   lstClientes.ListItems.Remove (x)
                   x = x - 1
                   y = y - 1
              Fim:
                   x = x + 1
              Wend
         End If
    End Sub
    
    Acho que é mesmo isto que ele quer... como no Vista...
     
  6. jpaulino

    jpaulino Power Member

    >> Certo... mas por acaso fiz há pouco tempo um projecto em VB6 e usei o InStr...
    Funciona perfeitamente...

    Sim, mas com o teu código o que fazes é remover os items da lista. Imagina na pesquisa da palavra "exemplo". Quando carregar em "e" apagas todos os item que não tenham a palavra "e". Depois carregas em "x" e apagar todos os que não tenham a palavra "ex".

    Agora o problema: E se apagares o x (porque te enganaste a escrever) ? Tens de carregar todos os items e voltar a "filtrar".

    O que eu quero dizer é que a listview não se podem fazer filtros simples, no entanto pode servir dependendo do fim a que se que atingir.

    Pessoalmente utilizo uma textbox e um botão de pesquisa.
     
  7. filipemm

    filipemm Power Member

    Não.. como é no evento change da textbox ele vê sempre o texto da textbox...
    Se apagar o 'x' e ficar só com o 'e' ele filtra pelo só pelo 'e'....
    Acho que fica mais simples do que ter um botão pesquisar e não ver os dados que vão ficando pelo caminho com o filtro...
    Não sei se me fiz entender xDD
     
  8. jpaulino

    jpaulino Power Member

    Provavelmente até percebi mal, mas se apagas os itens da lista como é que os colocas lá ?

    Tudo bem que está no textchange event mas .... os apagas tens de voltar a coloca-los para poderes filtrar novamente.

    Mas vou testar o teu código.
     
  9. filipemm

    filipemm Power Member

    Pois.. acho que não me expliquei bem...
    Na função Listar_Clientes faço um select à BD e preencho o listview.. por isso cada vez que o texto da textbox muda o select é feito de novo e a listview preenchida com os dados de acordo com o filtro da textbox.. acho que foi isso que não percebeste...
     
  10. jpaulino

    jpaulino Power Member

    Ok, eu sabia que faltava qualquer coisa ... :p
     
  11. redshot

    redshot Electromoderator
    Staff Member

    Estou a utilizar o Visual Basic 2005 Express Edition.

    fmorais90: É uma coisa desse género. Vou testar esse código. Só não percebi o que é o optNome e o optNif.
     
    Última edição: 4 de Abril de 2008
  12. filipemm

    filipemm Power Member

    Esses opt são os OptionButton (ou RadioButton) que eu tenho para quando é para pesquisar pelo nome ou pelo NIF.. dependendo do que está seleccionado..
     

Partilhar esta Página