Fonte: www.activedelphi.com.br
Esta dica vem para mostrar como fazer a ordenação dos registros do DBGrid ao se clicar no título das colunas, para quem não utiliza o ClientDataSet e precisa fazer a ordenação via SQL.
Caso você utilize o CDS, leia a dica "ClientDataSet - Clicando no Título das Colunas do DBGrid para Ordenar".
Primeiramente, crie um variável global ou pública (no meu caso eu criei com o nome "ordena") do tipo Boolean.
Depois inicialize ela quando abre o formulário, no evento onCreate, passando ela para True.
procedure TfrmLista_Grupo.FormCreate(Sender: TObject);
begin
Ordena := True;
end;
Depois no evento DBGrid1TitleClick, faça o seguinte código:
procedure TfrmLista_Grupo.DBGrid1TitleClick(Column: TColumn);
var
i : integer;
coluna : String;
begin
//para todas as colunas
for i := 0 to DBGrid1.Columns.count-1 do
begin
DBGrid1.Columns[i].Title.Color := clBtnFace; //fundo padrão
DBGrid1.Columns[i].Title.Font.Color := clBlack; //texto preto
DBGrid1.Columns[i].Title.Font.Style := []; //sem efeito
end;
coluna := Column.FieldName;
Column.Title.color := clInfoBk; //quando clicado ele muda a cor do titulo,fonte
Column.Title.Font.Color := clBlue;
Column.Title.Font.Style := [fsBold, fsItalic];
if (Ordena) then
begin
IBDataSet.Active := false;
IBDataSet.SelectSQL.Clear;
IBDataSet.SelectSQL.Add('SELECT * FROM NOME_DA_TABELA ORDER BY ' + coluna);
IBDataSet.Active := True;
Ordena := False;
end
else
begin
IBDataSet.Active := false;
IBDataSet.SelectSQL.Clear;
IBDataSet.SelectSQL.Add('SELECT * FROM NOME_DA_TABELA ORDER BY ' + coluna + ' DESC');
IBDataSet.Active := True;
Ordena := True;
end;
end;
Caso você utilize o CDS, leia a dica "ClientDataSet - Clicando no Título das Colunas do DBGrid para Ordenar".
Primeiramente, crie um variável global ou pública (no meu caso eu criei com o nome "ordena") do tipo Boolean.
Depois inicialize ela quando abre o formulário, no evento onCreate, passando ela para True.
procedure TfrmLista_Grupo.FormCreate(Sender: TObject);
begin
Ordena := True;
end;
Depois no evento DBGrid1TitleClick, faça o seguinte código:
procedure TfrmLista_Grupo.DBGrid1TitleClick(Column: TColumn);
var
i : integer;
coluna : String;
begin
//para todas as colunas
for i := 0 to DBGrid1.Columns.count-1 do
begin
DBGrid1.Columns[i].Title.Color := clBtnFace; //fundo padrão
DBGrid1.Columns[i].Title.Font.Color := clBlack; //texto preto
DBGrid1.Columns[i].Title.Font.Style := []; //sem efeito
end;
coluna := Column.FieldName;
Column.Title.color := clInfoBk; //quando clicado ele muda a cor do titulo,fonte
Column.Title.Font.Color := clBlue;
Column.Title.Font.Style := [fsBold, fsItalic];
if (Ordena) then
begin
IBDataSet.Active := false;
IBDataSet.SelectSQL.Clear;
IBDataSet.SelectSQL.Add('SELECT * FROM NOME_DA_TABELA ORDER BY ' + coluna);
IBDataSet.Active := True;
Ordena := False;
end
else
begin
IBDataSet.Active := false;
IBDataSet.SelectSQL.Clear;
IBDataSet.SelectSQL.Add('SELECT * FROM NOME_DA_TABELA ORDER BY ' + coluna + ' DESC');
IBDataSet.Active := True;
Ordena := True;
end;
end;
Valeu ai pela dica. Para mim foi muito util.
ResponderExcluirSua dica foi muito importante, fiz algumas mudanças e consegui organizar do jeito que eu precisava. Valeu ai pela dica.
ResponderExcluircara muito 10.. adaptei no meu sitema e ficou jóia.
ResponderExcluirQue bom é sempre bom ajudar!!
ExcluirSinta a vonta para pergunta, se eu souber, com certeza irei te ajudar.