domingo, 22 de maio de 2011

Ordenando registros via SQL pelo título das colunas do DBGrid


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;

4 comentários:

  1. Valeu ai pela dica. Para mim foi muito util.

    ResponderExcluir
  2. Sua dica foi muito importante, fiz algumas mudanças e consegui organizar do jeito que eu precisava. Valeu ai pela dica.

    ResponderExcluir
  3. cara muito 10.. adaptei no meu sitema e ficou jóia.

    ResponderExcluir
    Respostas
    1. Que bom é sempre bom ajudar!!
      Sinta a vonta para pergunta, se eu souber, com certeza irei te ajudar.

      Excluir