Ordenação de um ClientDataSet


Veja nesta dica como é simples realizar a tarefa de ordenação dos dados em um TClientDataSet, através de uma função. O código abaixo mostra como realizar a ordenação clicando no titulo da coluna desejada de um TDBGrid. Clicando uma vez será utilizada a ordem crescente e na segunda, a ordem decrescente. Primeiramente vamos criar a função;
procedure TFOrdenacao.OrdenarCDS(ADados: TClientDataSet; AFieldName: String);
var
  AIndexName, AIndexNameOld: WideString;
  ADesc, AIndex: Boolean;
begin
  AIndexNameOld := ADados.IndexName;
  ADados.IndexName := EmptyWideStr;
  ADados.IndexDefs.BeginUpdate;
  AIndexName := 'idx' + AFieldName;
  if AnsiContainsText(AIndexNameOld, AFieldName) then
    if not AnsiContainsText(AIndexNameOld, 'Desc') then
      AIndexName := AIndexname + 'Desc';
  ADesc := AnsiContainsText(AIndexName, 'Desc');
  AIndex := ADados.IndexDefs.IndexOf(AIndexName) >= 0;
  ADados.IndexDefs.EndUpdate;
  if not AIndex then begin
    if ADesc then
      ADados.AddIndex(AIndexName, AFieldName, [ixCaseInsensitive, ixDescending], AFieldName, AFieldName)
    else
      ADados.AddIndex(AIndexName, AFieldName, [ixCaseInsensitive], EmptyStr, AFieldName);
  end;
  ADados.IndexName := AIndexName;
end;

E no evento onTitleClick do TDBGrid colocares-mos o chamado da função
OrdenarCDS(CDSGenerico, Column.FieldName);

0 comentários:

Postar um comentário