Fórum Filtro em List View #414231

17/03/2012

0

Alguem conhece um modo legar de fazer um filtro numa listview?
eu faço da seguinte maneira:
Tenho uma listview1 com os itens. E outra (listview2) sem item nenhum, na qual aparecem os itens quando filtrados.
eu percorro a listview1 procuro se existe o texto buscado e entao adiciona na listview2.
Porem há um problema nisso, o programa fica travado enquanto esta buscando, e é muito demorado.
se alguem tiver outro modo, agradeceria.
Jackson Veiga

Jackson Veiga

Responder

Posts

18/03/2012

Bruno Leandro

você precisa usar o listview, ou tem a possibilidade de utilizar outro componente, pois o dbgrid ficaria bem mais simples este processo de filtro
Responder

Gostei + 0

18/03/2012

Jackson Veiga

mas neste caso, para mim eu queria usar a listview, para mim seria mais viavel, pois não conheço muito o dbgrid, e nao gosto do q conheço dele
Responder

Gostei + 0

18/03/2012

Bruno Leandro

você esta usando o Items.BeginUpdate e Items.EndUpdate ao adicionar os itens talvez ajude um pouco no desempenho, você esta buscando como com IndexOf?
Responder

Gostei + 0

18/03/2012

Jackson Veiga

não, eu vou montar aqui e ja mando o modo como estou usando.
Responder

Gostei + 0

18/03/2012

Jackson Veiga

O modo como estou fazendo o filtro é este:

var
 i:integer;
begin
ListView2.Items.Assign(ListView1.Items);

ListView2.Items.BeginUpdate;
 for i:=ListView2.Items.Count-1 downto 0 do
  if pos(LowerCase(Edit1.Text),LowerCase(ListView2.Items.Item[i].Caption))=0 then
    ListView2.Items.Delete(i);
ListView2.Items.EndUpdate;
end;


para facilitar e se tornar um pouco mais rapido, eu jogo todos os items para a listview2 e dps vou procurando pelo texto no caption e excluo o item se nao for encontrado nada do texto nele
o codigo q eu postei é bem basico, entao se nao colocar nada na edit ele nao encontra nada, mais eu fiz agora, pois nao estou com o meu projeto em maos
Responder

Gostei + 0

19/03/2012

Bruno Leandro

olá coloque o ListView2.Items.BeginUpdate; antes do ListView2.Items.Assign(ListView1.Items); veja se fica com bom desempenho
Responder

Gostei + 0

19/03/2012

Jackson Veiga

creio que nao va resolver, porque colocando ali talvez ele apenas agilize o processo de jogar todos itens de uma list para outra, e o problema de travar esta na parte do for.
pois enquanto o comando for esta executando o aplicativo fica travado, e dependendo da quantidade na list isso pode demorar muito
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar