



Fala galera do Show Delphi, tudo beleza?
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.
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; |
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