Pero el código que pone
totote está pensado específicamente para un ClientDataSet lo cual da la enorme ventaja de no tener que reconsultar a la base. El ordenamiento se hace en memoria, por lo cual es mucho más rápido. Además, el código es genérico; sirve para cualquier ClientDataSet sin importar el nombre de los campos ni la columna seleccionada.
Eso sí, creo que se puede simplificar un poco
Código Delphi
[-]
procedure SortCDS(DataSet: TClientDataSet; Column: TColumn);
var
IndexName: String;
IndexOptions: TIndexOptions;
begin
if DataSet.IndexName = Column.FieldName + '_IdxA' then
begin
IndexName := Column.FieldName + '_IdxD';
IndexOptions := [ixDescending];
end
else
begin
IndexName := Column.FieldName + '_IdxA';
IndexOptions := [];
end;
if DataSet.IndexDefs.IndexOf(IndexName) = -1 then
DataSet.AddIndex(IndexName, Column.FieldName, IndexOptions);
DataSet.IndexName := IndexName;
end;
// Saludos