segunda-feira, 12 de agosto de 2013

ClientDataSet - Clicando no Título das Colunas do DBGrid para Ordenar


Veja nesta dica como é simples realizar a tarefa de ordenação dos dados de um DBGrid que está ligado a um ClientDataSet, criando e selecionando índices em memória.
O código abaixo mostra como realizar a ordenação clicando no titulo da coluna desejada. Clicando uma uma vez será utilizada a ordem crescente e na segunda, a ordem decrescente.

Primeiramente, no evento onCreate do Form, criaremos um índice Crescente e um Decrescente para cada campo do DBGrid, com o seguinte código:

procedure TForm1.FormCreate(Sender: TObject);
var
  i : integer;
begin
  for i := 0 to clientdataset1.FieldCount - 1 do
  begin
    CLIENTDATASET1.IndexDefs.Add('a' + CLIENTDATASET1.Fields[i].FieldName, 
      CLIENTDATASET1.Fields[i].FieldName, []);
    CLIENTDATASET1.IndexDefs.Add('d' + CLIENTDATASET1.Fields[i].FieldName,
      CLIENTDATASET1.Fields[i].FieldName, [ixDescending]);
  end;
end;
Em seguida, programaremos o evento onTitleClick do DBGrid:

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
  if 'a' + Column.FieldName = CLIENTDATASET1.IndexName then
    CLIENTDATASET1.IndexName := 'd' + column.FieldName
  else
    CLIENTDATASET1.IndexName := 'a' + column.FieldName;
end;
Pronto! Seu DBGrid em ordem Crescente e Decrescente de qualquer coluna, com apenas um click!