[DELPHI] ORDENAR OS REGISTROS AO CLICAR NO TÍTULO DA COLUNA DO DBGRID

O componente DBGrid é muito utilizado pelos desenvolvedores Delphi para apresentar dados de um DataSet para o usuário, seja esses dados resultado de um select no banco de dados, registros temporários, etc.

Neste post irei mostrar como ordenar os registros ao clicar no título da coluna do DBGrid, dessa forma podemos organizar os dados de forma ascendente ou descendente.



Para implementar essa rotina, iremos utilizar o evento OnTitleClick do DBGrid.

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
  idxName: string;
  ordenacao: TIndexOptions;
  I: Integer;
begin
  // retira a formatação negrito de todas as colunas
  for I := 0 to DBGrid1.Columns.Count - 1 do
    DBGrid1.Columns[I].Title.Font.Style := [];

  // configura a ordenação ascendente ou descendente
  if ClientDataSet1.IndexName = Column.FieldName + '_ASC' then
  begin
    idxName := Column.FieldName + '_DESC';
    ordenacao := [ixDescending];
  end
  else
  begin
    idxName := Column.FieldName + '_ASC';
    ordenacao := [];
  end;

  // adiciona a ordenação no DataSet, caso não exista
  if ClientDataSet1.IndexDefs.IndexOf(idxName) < 0 then
    ClientDataSet1.AddIndex(idxName, Column.FieldName, ordenacao);

  ClientDataSet1.IndexDefs.Update;

  // formata o título da coluna em negrito
  Column.Title.Font.Style := [fsBold];

  // atribui a ordenação selecionada
  ClientDataSet1.IndexName := idxName;

  // move o cursor para o primeiro registro
  ClientDataSet1.First;
end;

Gostou? Deixe seu comentário... Convido você a seguir meu blog, sua presença é bem vinda!【ツ】

6 comentários:

  1. Meu amigo, enrosquei na questão: ...W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.

    Dai não sei como proceder para adequar o codigo, estou usando Delphi10.2, esse erro ocorre bem aqui:
    ...
    qry.AddIndex(idxName, Column.FieldName, ordenacao);
    ...

    Obrigado.

    ResponderExcluir
  2. Fantástico cara !!! Muito obrigado pelo seu empenho e boa vontade de compartilhar conhecimento.....

    ResponderExcluir
  3. da o erro [dcc32 Error] Ualteraconta.pas(116): E2010 Incompatible types: 'string' and 'TIndexOptions'

    ResponderExcluir