ListBox duplicando

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

gbetorodrigues
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 08 Out 2010 09:51
Localização: Rio de Janeiro / RJ

ListBox duplicando

Mensagem por gbetorodrigues »

Quando exibo um LISTBOX com um set filter ele está duplicando o registro. Ex. Caso o resultado de um set filter seja apenas 1 registro ele coloca 3 linhas repetidas. Por que sera:

Código: Selecionar todos

---------------------------------------------

FUNCTION MostFilt()

TIPOIMOV->(dbSetOrder(3)) // descricao 
TIPOIMOV->(dbSeek(optpimovel))

aliaslaudo := TIPOIMOV->BASE

SET FILTER TO // LIMPANDO O FILTRO CORRENTE 

otela1:update()
oLbx9:hide()

SELECT (aliaslaudo) // SELECIONANDO A AREA (BASE) 

(aliaslaudo)->(dbGotop())


IF EMPTY(xcodLaudo)
SET FILTER TO (aliaslaudo)->BAIRRO == opBairro
ELSE 
SET FILTER TO ALLTRIM( (aliaslaudo)->LAUDO ) == ALLTRIM(xcodLaudo) 
ENDIF 

(aliaslaudo)->(dbGoTop())

//oLbx9:UpsTable()
oLbx9:refresh()
oLbx9:Gotop()


otela1:update()
otela1:refresh()

oLbx9:SetFocus()

oLbx9:show()

RETURN .T.

----------------------------------------------------
Obrigado a TODOS que leram e FELIZ 2011 !!!
Editado pela última vez por Maligno em 03 Jan 2011 14:47, em um total de 2 vezes.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: ListBox duplicando

Mensagem por rochinha »

Amiguinho,

De mais uns dois comandinhos para o objeto ListBox:

objetoListbox:UpStable()
objetoListbox:Refresh()

Em minha aplicação como eu realizo filtragens de vários ListBoxes ao mesmo tempo, eu uso algumas funçõeszinhas para o auxilio.

O fato do SetFilter ser lento no meu caso eu optei por usar indices CDX e seus métodos de filtragem via Scope().

Se voce usa com NTX deverá passar a usar este RDD para melhorar a performace de seu aplicativo. SetFilter te fará sofrer.

Exemplo:

Código: Selecionar todos


           dbSelectArea( "PENDENTE" )
           OrdSetFocus( 1 )
           QuickScope( str(M->IDCLIENTE,5,0) )
           dbSetfilter( nil, nil ); dbSetFilter( {|| PENDENTE->TIPO='C'}, "PENDENTE->TIPO='C'" )
           QuickRefresh( oLbxP4C )
Funções:

Código: Selecionar todos

FUNCTION QuickScope(cLimInf,cLimSup)
  DEFAULT cLimInf := NIL
  DEFAULT cLimSup := cLimInf
  OrdScope(0,cLimInf)
  OrdScope(1,cLimSup)
  dbGotop()
  return .t.

FUNCTION QuickRefresh( oBject )
  oBject:UpStable()
  oBject:Refresh()
  dbGotop()
  return .t.
As funções são apenas para economizar na programação e deixar seu código mais legivel.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
gbetorodrigues
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 08 Out 2010 09:51
Localização: Rio de Janeiro / RJ

Re: ListBox duplicando

Mensagem por gbetorodrigues »

Caro, Rochinha, já havia utilizado o upstable e mesmo assim nao funcionou. Quanto ao set filter, o listbox deverá apresentar, somente o que foi escolhido pelo usuário, para não confundi-los, o sistema também está dotado dos indices CDX. É utilizado um SET DELE ON antes fazer o filtro
Responder