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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo