Bem, amigo, não sei que componentes vc tá usando, mas eu faço desta 
mameira com dexpress:

procedure TfrmProcurar.DBGrid1TitleClick(Column: TColumn);
begin
  IndexFieldNames:= Column.FieldName;
end;


Otto Júnior escreveu:
> Eu uso essa função no D7 + Firebird, ver se dar certo pra vc
>
>
> procedure Tform1.DBGrid1TitleClick(Column: TColumn);
> begin
>   OrdenarDBGrid( Column.Field.DataSet, Column, DBGrid1 );
> end;
>
>
> =============================================================
> Procedure OrdenarDBGrid( fDataSet : TDataSet; fColumn : TColumn; fDBGrid :
> TDBGrid = Nil );
> Var liCont : Integer;
>     bAchou : Boolean;
> begin
>    If ( fColumn.Field.Lookup ) Or
>       ( fColumn.Field.Calculated ) Then
>    Begin
>       MessageDlg('Ordenação não disponível', mtInformation, [mbOK], 0);
>
>       Exit;
>    End;
>
>    If fDataSet <> Nil Then
>    Begin
>       If fDataSet Is TQuery Then
>       Begin
>          If Pos( 'Order', ( fDataSet As TQuery ).SQL.Text ) > 0 Then
>          Begin
>             If Pos( ' Desc', ( fDataSet As TQuery ).SQL.Text ) = 0 Then
>                ( fDataSet As TQuery ).SQL.Text := Copy( ( fDataSet As 
> TQuery
> ).SQL.Text, 1, Pos('Order', ( fDataSet As TQuery ).SQL.Text)-1) + 
> 'Order By
> '+fColumn.FieldName+' Desc'
>             Else
>                ( fDataSet As TQuery ).SQL.Text := Copy( ( fDataSet As 
> TQuery
> ).SQL.Text, 1, Pos('Order', ( fDataSet As TQuery ).SQL.Text)-1) + 
> 'Order By
> '+fColumn.FieldName;
>          End
>          Else
>             ( fDataSet As TQuery ).SQL.Text := ( fDataSet As TQuery
> ).SQL.Text + ' Order By ' + fColumn.FieldName;
>          ( fDataSet As TQuery ).Open;
>       End
>       Else If fDataSet Is TTable Then
>       Begin
>          ( fDataSet As TTable ).IndexDefs.Update;
>          bAchou := False;
>          For liCont := 1 To ( fDataSet As TTable ).IndexDefs.Count Do
>          Begin
>             If Pos( UpperCase( fColumn.FieldName ), UpperCase( ( 
> fDataSet As
> TTable ).IndexDefs.Items[ liCont - 1 ].Fields ) ) > 0 Then
>             Begin
>                ( fDataSet As TTable ).IndexFieldNames := 
> fColumn.FieldName;
>                bAchou := True;
>                Break;
>             End;
>          End;
>          If Not bAchou Then
>             MessageDlg('Ordenação não disponível', mtInformation, 
> [mbOK], );
> End;
>       If fDBGrid <> Nil Then
>       Begin
>          Try
>             For liCont := 1 To fDBGrid.Columns.Count Do
>             Begin
>                fDBGrid.Columns[ liCont - 1 ].Title.Color      := 
> clBtnFace;
>                fDBGrid.Columns[ liCont - 1 ].Title.Font.Color := clBlack;
>                fDBGrid.Columns[ liCont - 1 ].Title.Font.Style := [];
>             End;
>          Except
>
>          End;
>       End;
>       fColumn.Title.color      := ClYellow;
>       fColumn.Title.Font.Style := [ fsBold ];
>       //Column.Title.Font.Style := [ fsBold, fsItalic];
>       fColumn.Title.Font.Color := clRed;
>    End
>    Else
>       MessageDlg('Objeto não permitido nesta pesquisa', mtError, 
> [mbOK], 0);
>
> End;
> =============================================================
>
> Otto Junior
> Natal/RN
>
>
> -----Mensagem original-----
> De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
> nome de Flavio
> Enviada em: quarta-feira, 12 de julho de 2006 15:07
> Para: delphi-br@yahoogrupos.com.br
> Assunto: [delphi-br] DBGrid !!!! HELP !!!!
>
> Olá pessoal,
>
> Será que alguém pode me ajudar com uma duvida !?
>
> é a seguinte:
>
> Eu tenho um DBGrid (Delphi 6) e cada coluna é uma coluna da tabela
> Patrimonio do banco de dados Interbase 6.
> Gostaria de saber como faço para, na hora q o usuário clicar em uma coluna
> do DBGrid, automaticamente é deixado em ordem alfabética referente a 
> coluna
> q foi clicada. entenderam néh ?!
>
> Uma dúvida simples, porém pra mim é duvidosa...
>
> Obrigado pela atenção !
>
> Flávio
>
>            
> ---------------------------------
> Você quer respostas para suas perguntas? Ou você sabe muito e quer
> compartilhar seu conhecimento? Experimente o Yahoo! Respostas!
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a