Ver Mensaje Individual
  #8  
Antiguo 25-01-2021
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Reputación: 19
olbeup Va camino a la fama
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
    // Columna de ordenación
    PFieldSorted: TIDFieldSorted;
  public
  end;

var
  frmForm: TfrmForm1

implementation

//      FUNCIONE DEVUELVE LA COLUMNA DEL DBGRID PASANDO EL NOMBRE DE LA COLUMNA //

// Devuelve la columna del DBGrid según FieldColumn
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;

// Ya en el DBGridTitleClick, pones esto
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.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita