Está en la página 1de 3

5/5/2020 Foros Club Delphi - Ordenar DBGRID en Delphi 10 Seattle.

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 17: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
https://clubdelphi.com/foros/printthread.php?t=89151 1/3
5/5/2020 Foros Club Delphi - Ordenar DBGRID en Delphi 10 Seattle.
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 17:27:19

Hola,

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

waly2k1 28-01-2016 06: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 18: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

https://clubdelphi.com/foros/printthread.php?t=89151 2/3
5/5/2020 Foros Club Delphi - Ordenar DBGRID en Delphi 10 Seattle.

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:06:39.

Powered by vBulletin® Version 3.6.8


Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi

https://clubdelphi.com/foros/printthread.php?t=89151 3/3