Ver Mensaje Individual
  #3  
Antiguo 02-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

Última edición por roman fecha: 02-05-2008 a las 18:40:31.
Responder Con Cita