DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

PARA QUEM GOSTA DE DELPHI

Como ordenar um ClientDataSet de forma decrescente?

Fala galera do Show Delphi, tudo beleza?

order by client dataset delphi

Ordenar os dados de um DataSet sem ser via SQL é necessário em várias ocasiões, tanto para facilitar a localização de registros por usuários coo minimizar a necessidade de consultas ao banco de dados.

Certo e como fazer?

Para ordenar de forma crescente é relativamente fácil, sendo somente necessário colocar o campo na propriedade IndexFieldNames do ClientDataSet.

Porém para ordenar de forma decrescente é um pouco mais complexo, sendo necessário o uso do IndexDefs.

Os IndexDefs Índices persistentes são criados no IndexDefs de seu DataSet. Assim você pode, para cada índice, definir uma série de propriedades. São utilizados da mesma forma que os índices temporários, bastando utilizar o nome dado ao índice persistente quando os mesmos forem criados em design-time.

Para adicionar um índice persistente podemos fazer conforme o código abaixo:

1
2
3
4
5
6
with ClientDataSet1.IndexDefs.AddIndexDef do 
begin 
  Name := vIndice; 
  Fields := Column.FieldName; 
  Options := [ixDescending]; 
end;

Certo, mas parece complicado, tem como facilitar?

Claro! Para simplificar o processo, foi desenvolvida uma rotina genérica, para a ordenação do ClientDataSet pelo clique da coluna em um DBGrid.

Neste caso, no primeiro clique ordena de forma crescente e no segundo clique ordena de forma decrescente.

Veja o exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
  vIndice: string;
  vExiste: boolean;
begin
  if ClientDataSet1.IndexFieldNames = Column.FieldName then
  begin
    vIndice := AnsiUpperCase(Column.FieldName + '_INV');
 
    try
      ClientDataSet1.IndexDefs.Find(vIndice);
      vExiste := True;
    except
      vExiste := False;
    end;
 
    if not (vExiste) then
    begin
      with ClientDataSet1.IndexDefs.AddIndexDef do
      begin
        Name := vIndice;
        Fields := Column.FieldName;
        Options := [ixDescending];
      end;
    end;
 
    ClientDataSet1.IndexName := vIndice;
  end
  else
    ClientDataSet1.IndexFieldNames := Column.FieldName;
end;

Veja que é esta linha: Options := [ixDescending];
que faz a ordenação inversa.

Isso é muito útil, por exemplo, para fazer ordenações crescentes e decrescentes automaticamente em seus DBGrids.

Dúvidas ou sugestões, deixe nos comentários do post.

Um abraço e até o próximo post. Valeu!

 

Fonte
Baseado no post: https://pt.stackoverflow.com/questions/6075/ordena%C3%A7%C3%A3o-crescente-e-decrecente-no-clientdataset

Facebook Comments Box
  • Giovani Da Cruz
  • 15.708 views
  • 0 comentários
  • 16 de setembro de 2015

Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!

Deixe um comentário

Ir ao topo

© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados