Quick Tips: Ordenação no DBGrid – Parte 3

Nesta quick tip veremos como marcar a coluna de forma a indicar para o usuário se a ordenação é crescente ou decrescente.

Quick Tips: Ordenação no DBGrid – Parte 3

 

Nesta quick tip veremos como marcar a coluna de forma a indicar para o usuário se a ordenação é crescente ou decrescente.

 

A idéia é mudar a fonte para azul do titulo da coluna ordenada de forma crescente e para vermelho quando ordenada de forma decrescente.

 

Para isso, altere o código do evento TitleClick para que fique da seguinte forma:

 

procedure TForm1.DBGridPrincipalTitleClick(Column: TColumn);

var

  OrdenaDescAnt:Boolean;

  Idx:TIndexDef;

Begin

  If Not TClientDataSet(Column.Grid.DataSource.DataSet).Active Then

Abort;

 

  // O índice já está em uso

  TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.update;

 

  if Assigned(OldColumn) then

  begin

//Volta a cor da coluna ordenada anteriormente

    OldColumn.Title.Font.Color := clBlack;

OldColumn.Title.Font.Style := [];

 

//Verifica se o índice atual é descendente

OrdenaDescAnt := (ixDescending in TClientDataSet(OldColumn.Grid.DataSource.DataSet).IndexDefs.Find(OldColumn.Field.FieldName).Options);

//Remove index existente

TClientDataSet(OldColumn.Grid.DataSource.DataSet).DeleteIndex(OldColumn.Field.FieldName);

  end;

 

  //Verifica se o index da lista defaul do dataSet

  if(TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.IndexOf(Column.Field.FieldName)) > -1 then

Idx := TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName)

  else

idx := nil;

 

  //Se estava configurado para ordem descendente ou

  //se clicou em uma coluna diferente da anterior

  //Então ordena de forma ascendente

  if (OrdenaDescAnt)or(OldColumn <> Column)then

  begin

//se index nao estiver criado entao adiciona, senao remove configuração descendente

if(Idx = nil)then

TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [], '', '', 0)

else

idx.Options := idx.Options - [ixdescending];

 

Column.Title.Font.Color := clBlue;

Column.Title.Font.Style := [fsBold];

  end

  else

  begin

//se index nao estiver criado entao adiciona, senao adiciona configuração descendente

if(Idx = nil)then

TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [ixdescending], '', '', 0)

else

 idx.Options := idx.Options + [ixdescending];

 

Column.Title.Font.Color := clRed;

Column.Title.Font.Style := [fsBold];

  end;

 

  OldColumn := Column;

  TClientDataSet(Column.Grid.DataSource.DataSet).IndexName := Column.Field.FieldName;

end;



É isso aí pessoal, vou ficando por aqui, espero que tenham gostado.

Fiquem a vontade para criticar, tirar dúvidas e sugerir novos temas.
Abraço.

Ricardo Coelho

Artigos relacionados