Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Ordenar DBGRID en Delphi 10 Seattle. (https://www.clubdelphi.com/foros/showthread.php?t=89151)

jeremiselxi 05-10-2015 18:24:14

Ordenar DBGRID en Delphi 10 Seattle.
 
Buen día.

Muchos me imagino que han utilizado este trozo de código para ordenar campos en delphi 7:
Código Delphi [-]
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
{$J+}
 const PreviousColumnIndex : integer = -1;
{$J-}
begin
  if DBGrid1.DataSource.DataSet is TCustomADODataSet then
  with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
  begin
    try
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
    except
    end;

    Column.title.Font.Style := 
    Column.title.Font.Style + [fsBold];
    PreviousColumnIndex := Column.Index;

    if (Pos(Column.Field.FieldName, Sort) = 1)
    and (Pos(' DESC', Sort)= 0) then
      Sort := Column.Field.FieldName + ' DESC'
    else
      Sort := Column.Field.FieldName + ' ASC';
  end;
end;

pero al utilizar una de las versiones XE en adelante ya no funciona.

En este sentido, luego de investigar y realizar pruebas, adjunto la forma de como ordenarlo inclusive para la ultima versión Delphi 10 seattle.

Código Delphi [-]
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
{$J+}
 const PreviousColumnIndex : integer = -1;
{$J-}
begin
  if DBGrid1.DataSource.DataSet is TCustomADODataSet then
  with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
  begin
    try
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
    except
    end;

    Column.title.Font.Style :=
    Column.title.Font.Style + [fsBold];
    PreviousColumnIndex := Column.Index;

if  (ANSIPos(ANSIString(Column.Field.FieldName), Sort) = 1) and
    (ANSIPos(ANSIString(' DESC'), Sort)= 0) then
//antes
//    if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then
      Sort := Column.Field.FieldName + ' DESC'
    else
      Sort := Column.Field.FieldName + ' ASC';
  end;
end;

Espero sea de utilidad ya que me han ayudado bastante y con esto aporto mi pedazo de arena.

Muchos saludos desde República Dominicana.

dec 05-10-2015 18:27:19

Hola,

Gracias por el aporte. He movido el hilo al foro de "Trucos". :)

waly2k1 28-01-2016 07:30:22

Ordenar
 
Código:

    if qryPROD.Sort = Column.FieldName then
    begin
        qryPROD.Sort := Column.FieldName + ' DESC'
    end
    else
    begin
        qryPROD.Sort := Column.FieldName;
    end;

Despues los coloreas como quieras a la cabecera, esto es con ADO como en tu ej. y me manejo directamente con la consulta
Saludos

oscarac 26-11-2017 19:48:13

saludos
he probado esta rutina para ordenar, pero en la primera linea
la condicion es falsa por eso no entra al bloque del if

Código Delphi [-]
if DBGrid1.DataSource.DataSet is TCustomADODataSet then

que significa esto?
es decir, cual es la pregunta?
entiendo que es para los que usan ADO, pero y si uso FireDac?


La franja horaria es GMT +2. Ahora son las 15:15:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi