ListView: Ordenação Descendente no OnTitleClick

13/09/2004

0

Olá programadores bom dia.


Através de um artigo da Clube Delphi 30, estou usando o componente
ListView para exibir os dados de uma tabela(pasmem dbf).

Agora o que eu gostaria de fazer e que não explica no artigo é
a ordenação descendente.

a procedure para ordenação ascendente é esta:

[color=green:eb6073e625]

procedure TFrmBoletoLaser.lsvRetornoColumnClick(Sender: TObject;
  Column: TListColumn);
const
  aCampo : array [0..13] of string = (´TIPO´,´TITULO´,´DESCRICAO´,
           ´DATVEN´,´VLRTITULO´,´VLRPGTO´,´DATENT´,´DATLIQ´,´VLRJUROS´,´VLRABAT´,
           ´VLRIOF´,´VLRDESC´,´VLRMORA´,´NBANCO´);
var
  sCampo : string;
begin
  sCampo := aCampo[Column.index];
  try
    cdsRetorno.IndexDefs.FindIndexForFields(sCampo);
  except
    on EDatabaseError do
    cdsRetorno.AddIndex(´Index´+sCampo,sCampo,[]);
  end;
  cdsRetorno.IndexFieldNames := sCampo;
  lsvRetorno.Invalidate;
end;
[/color:eb6073e625]


Li no help do Delphi:

Note: FindIndexForFields can only locate ascending indexes. To include descending indexes in the search, use GetIndexForFields.

mas não consegui usar

se alguem tiver uma dica.


Macario

Macario

Responder

Posts

02/02/2005

Emerson Nascimento

tente assim (não testei):
procedure TFrmBoletoLaser.lsvRetornoColumnClick(Sender: TObject; Column: TListColumn);
const
  aCampo : array [0..13] of string = (´TIPO´,´TITULO´,´DESCRICAO´,
           ´DATVEN´,´VLRTITULO´,´VLRPGTO´,´DATENT´,´DATLIQ´,´VLRJUROS´,´VLRABAT´,
           ´VLRIOF´,´VLRDESC´,´VLRMORA´,´NBANCO´);
var
  sCampo,sIndice : string;
  lDecrescente: boolean;
  Indice: TIndexDef;
begin
  sCampo := aCampo[Column.index];
  lDecrescente := cdsRetorno.IndexName=(´Index´+sCampo);
  try
    if lDecrescente
    then Indice := cdsRetorno.IndexDefs.GetIndexForFields(sCampo,True)
    else Indice := cdsRetorno.IndexDefs.FindIndexForFields(sCampo);
    sIndice := Indice.Name;
  except
    on EDatabaseError do
    begin
      sIndice := ´Index´+sCampo;
      if lDecrescente then
      begin
        sIndice := sIndice+´_D´;
        cdsRetorno.AddIndex(sIndice,sCampo,[ixDescending]);
      end
      else
        cdsRetorno.AddIndex(sIndice,sCampo,[]);
    end;
  end;
  cdsRetorno.IndexName := sIndice;
  lsvRetorno.Invalidate;
end;


isso funcionou?


Responder

02/02/2005

Macario

Olá emerson.en

Fiz um teste e não funcionou, colega.

Se tiver algum comentário. :roll:


Responder

02/02/2005

Emerson Nascimento

como você monta sua listview a partir do cds? seria necessário vc refazê-la depois de ordenar, não?


Responder

02/02/2005

Raserafim

Macario, você pode detalhar melhor como fazer?


Responder

03/02/2005

Emerson Nascimento

Macario, eu fiz um teste e funcionou..


Responder

03/02/2005

Macario

Ola colegas,

emerson.en, estarei testando novamente entao, blz. E obrigado por sua atenção.

raserafim apos testar(e testarei ate sexta) a dica do emerson, lhe digo os passos necessarios, pois ai esta completa.


Entao até...lá


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar