Eu utilizo o código abaixo. Desse modo ele ordena de forma crescente e decrescente. E com o Rubem falou, tem que usar o ClientDataSet.
procedure TForm1.DBGrid1TitleClick(Column: TColumn); var enum_IndexOption: TIndexOptions; str_IndexAsc, str_IndexDesc, str_IndexName: String; begin if (Column.Field.FieldKind = fkData) then begin str_IndexAsc := Concat('asc_',Column.FieldName); str_IndexDesc := Concat('desc_',Column.FieldName); str_IndexName := ''; enum_IndexOption := []; if (ClientDataSet1.IndexName = str_IndexAsc) then begin str_IndexName := str_IndexDesc; enum_IndexOption := [ixDescending]; end else if (ClientDataSet1.IndexName = str_IndexDesc) then begin str_IndexName := str_IndexAsc; end else begin str_IndexName := str_IndexAsc; end; ClientDataSet1.IndexDefs.Clear; ClientDataSet1.IndexDefs.Add(str_IndexName,Column.FieldName,enum_IndexOption); ClientDataSet1.IndexName := str_IndexName; end; end; [As partes desta mensagem que não continham texto foram removidas]