Hola opsmc,
Yo utilizo esto para ordenar cualquier columna aunque no este en el SELECT, mientras este en el DBGrid
Código Delphi
[-]type
TIDFieldSorted = packed record
FieldColumn: String;
FieldSorted: String;
end;
type
TfrmForm1 = class(TForm)
...
...
...
private
PFieldSorted: TIDFieldSorted;
public
end;
var
frmForm: TfrmForm1
implementation
function GetGridColumn(Grid: TDBGrid; FieldColumn: String): TColumn;
var
nI: Integer;
begin
Result := nil;
for nI := 0 to Grid.Columns.Count -1 do
if (Result <> nil) then
Break
else
if (Grid.Columns.Items[nI].FieldName = FieldColumn) then
Result := Grid.Columns.Items[nI];
end;
procedure TfrmForm1.DBGRid1TitleClick(Column: TColumn);
{$J+}
const
PreviousColumnIndex : integer = -1;
{$J-}
begin
if (Column = nil) and (PFieldSorted.FieldColumn = '') then
Exit;
if (Column = nil) then
Column := GetGridColumn(DBGRid1, PFieldSorted.FieldColumn);
with TCustomADODataSet(DBGRid1.DataSource.DataSet) do
begin
if PreviousColumnIndex > -1 then
DBGRid1.Columns[PreviousColumnIndex].Title.Font.Style :=
DBGRid1.Columns[PreviousColumnIndex].Title.Font.Style - [fsItalic, fsBold];
Column.title.Font.Style :=
Column.title.Font.Style + [fsItalic, fsBold];
PreviousColumnIndex := Column.Index;
if (Sort = '') and (PFieldSorted.FieldSorted <> '') then
Sort := PFieldSorted.FieldSorted
else
if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then
Sort := Column.Field.FieldName + ' DESC'
else
Sort := Column.Field.FieldName + ' ASC';
PFieldSorted.FieldColumn := Column.FieldName;
PFieldSorted.FieldSorted := Sort;
end;
end;
end.
Espero que te sirva.
Un saludo.