Hola ronalg,
Yo utilizo esto y me va bien.
Código Delphi
[-]
type
TIDFieldSorted = packed record
FieldColumn: String;
FieldSorted: String;
FieldColumnOld: String;
end;
En el formulario define una variable en private
Código Delphi
[-]
...
PFieldSorted: TIDFieldSorted;
funciones definidas
Código Delphi
[-]
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;
y esto
Código Delphi
[-]
procedure TfrmPresupuestos.dbgBudgetsTitleClick(Column: TColumn);
{$J+}
const
PreviousColumnIndex: integer = -1;
{$J-}
begin
if (Column = nil) and (PFieldSorted.FieldColumn = '') then
Exit;
if (Column = nil) then
Column := GetGridColumn(dbgBudgets, PFieldSorted.FieldColumn);
with TCustomADODataSet(dbgBudgets.DataSource.DataSet) do
begin
if PreviousColumnIndex > -1 then
dbgBudgets.Columns[PreviousColumnIndex].Title.Font.Style :=
dbgBudgets.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;
Un saludo.