Como ordenar um ClientDataSet de forma decrescente?
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.
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.AddIndexDefdobegin
Name := vIndice;
Fields := Column.FieldName;
Options :=[ixDescending];end;
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.
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.668 views
0 comentários
16 de setembro de 2015
Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
Strictly Necessary Cookies
Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.
If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.