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!【ツ】
Gostou? Deixe seu comentário... Convido você a seguir meu blog, sua presença é bem vinda!【ツ】
Meu amigo, enrosquei na questão: ...W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.
ResponderExcluirDai 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.
perfeito, muito obrigado!
ResponderExcluirNão funciona com datas e números
ResponderExcluirFantástico cara !!! Muito obrigado pelo seu empenho e boa vontade de compartilhar conhecimento.....
ResponderExcluirda o erro [dcc32 Error] Ualteraconta.pas(116): E2010 Incompatible types: 'string' and 'TIndexOptions'
ResponderExcluirSensacional! Muito obrigado.
ResponderExcluir