Pra isso vamos precisar conferir se as units DB e DBClient estão em nossa uses.
Agora vamos declarar a seguinte Procedure:
procedure OrdenarDataSet(var Tabela: TClientDataSet; Campos: String; Tipo: TIndexOptions);
Sendo que Tabela vai armazenar o ClientDataSet que precisa ser ordenado, Campos, que obviamente são os campos que serão ordenados e finalmente Tipo, que indica o tipo de ordenação e outros tipos de tratamento especiais, no caso do tipo, o mais comum é usar ou não o tipo ixDescending.
Ctrl + Shift + C em cima de nossa Procedure para criarmos seu corpo e vamos adicionar o seguinte código:
procedure TDM_Principal.OrdenarDataSet(var Tabela: TClientDataSet; Campos: String; Tipo: TIndexOptions);
var
i: Integer;
Nome: String;
begin
//Fazer um loop nos index já criados
for i := 0 to Tabela.IndexDefs.Count - 1 do
begin
//Verificar se já existe um index com os dados que pedimos
if (Tabela.IndexDefs.Items[i].Fields = Campos) and (Tabela.IndexDefs.Items[i].Options = Tipo) then
begin
//Se sim, setar o index no DataSet e sair da procedure
Tabela.IndexName := Tabela.IndexDefs.Items[i].Name;
exit;
end;
end;
//Se não existem index criados ou nenhum deles é o que foi requisitado..
//Criar um nome identificador do index
Nome := 'Index' + IntToStr(Tabela.IndexDefs.Count + 1);
//Criar o index
with Tabela.IndexDefs.AddIndexDef do
begin
Name := Nome;
Fields := Campos;
Options := Tipo;
end;
//Setá-lo no ClientDataSet
Tabela.IndexName := Nome;
end;
Agora para utilizar é simples.
Ordernar por data do mais antigo para o mais novo:
DM_Principal.OrdenarDataSet(DM_Principal.ClientDataSet, 'DATA', []);
Ordenar por data do mais novo para o mais antigo:
DM_Principal.OrdenarDataSet(DM_Principal.ClientDataSet, 'DATA', [ixDescending]);
Ordenar por nome em ordem alfabética
DM_Principal.OrdenarDataSet(DM_Principal.ClientDataSet, 'NOME', []);
Nenhum comentário:
Postar um comentário