PDA

Ver la Versión Completa : Grid ordenable?


mcs
27-03-2012, 10:36:44
Hola,

Tengo una aplicación que usa unos cuantos (10 o 12) TDBGrid. Un problema que veo es que por defecto el TDBGrid no ordena los resultados cuando se hace click en el nombre de la columna, y los usuarios esperan que esto funcione de esta forma.

Podría modificar todos los DBGrid que tengo en el programa para añadir esta funcionalidad, pero creo que es "un rollo". Y además, seguro que existe algún componente que ya lo tenga todo incorporado.

¿Voy equivocado? O sea, ¿existe algún componente Grid, preferiblamente gratuito (de las JVCL, por ejemplo), que tenga implementado la ordenación segun se pulse el título de las columnas?

Muchas gracias,

Marc

ElDioni
27-03-2012, 11:47:32
Hola,

no se si habrá algún componente de tipo Grid que te ordene automáticamente las columnas pinchando en los títulos. Yo te pongo un ejemplo simple de como podrías hacer la ordenación pinchando en los títulos.


procedure TFrmMenuArt.DbGrid1TitleClick(Column: TColumn);
begin
AdoQuery1.Close;
AdoQuery1.SQL.Text:='SELECT * FROM tutabla ORDER BY '+DBGrid1.Columns[column.Index].FieldName +' ASC';
AdoQuery1.Open;
end;


Espero que te sirva de algo.

Saludos.

radenf
27-03-2012, 12:05:23
Estimado mcs :

Este código permite ordenar los DBGrid al hacer click en el título. Es para ADO pero lo puedes adaptar a tu BD,

procedure Form1.DBGrid1TitleClick(Column: TbsColumn);
begin
if DBGrid1.DataSource.DataSet is TCustomADODataSet then
with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
if (Pos(Column.FieldName, Sort) = 1) and (Pos(' ASC', Sort)= 0) then
begin
Sort := Column.FieldName + ' ASC';
end
else
begin
Sort := Column.FieldName + ' DESC';
end;
Indice := Column.Index;
end;

Salu2

mcs
27-03-2012, 12:15:55
ElDioni, Radenf,

Gracias por vuestras sugerencias, y me guardo este código. Pero la verdad es que esto es lo último que quiero hacer, tener que añadir un código a cada grid que tenga el el programa. Pero bueno, si no encuentro ningún grid que lo haga automáticamente, es lo que haré.