Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   DBGrid ordenar haciendo click en el titulo (https://www.clubdelphi.com/foros/showthread.php?t=55992)

sonjeux 04-05-2008 07:32:07

DBGrid ordenar haciendo click en el titulo
 
Saludos, quiero hacer con un dbgrid algo como esto:
http://www.boliviatech.com/tabla.GIF http://www.boliviatech.com/tabla2.GIF
o saber si hay algun componente para firebird con el que pueda hacer eso, o sea ordenar por una columna haciendo click en el titulo, pero quiero que salga esa flechita que indica como esta ordenado.

Tambien quiero saber si alguien sabe como puedo hacer para buscar por un campo calculado en un ibtable.

Desde ya muchas gracias por su ayuda :D

Casimiro Notevi 04-05-2008 19:32:05

Para ordenar por un campo en concreto debes capturar el evento apropiado del grid, depende del que uses, puede ser algo así como: "HeadClick", "TitleClick", etc.
Por ejemplo, imagina que tienes un dbgrid asociado a un dataset mediante su correspondiente datasource, el dataset tiene una sentencia parecida a esta:
Código:

Select Codigo, Nombre, Salario from tbEmpleados order by Codigo
Quieres ordenar por "salario" y pinchas sobre el título del grid, haces algo parecido a esto:

Código:

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
  dataset.close;
  case Column of
    0: dataset.sql.text:='Select Codigo, Nombre, Salario from tbEmpleados order by Codigo';
    1: dataset.sql.text:='Select Codigo, Nombre, Salario from tbEmpleados order by Nombre';
    2: dataset.sql.text:='Select Codigo, Nombre, Salario from tbEmpleados order by Salario';
  end;
  dataset.open;
end;

Esto es una manera un poco "chapuza" de código, pero es sólo para que lo entiendas.

Para pintar la flechita o lo que quieras puedes hacer algo parecido:
Código:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;
  Rect: TRect; State: TGridDrawState);
 begin
  if Col=2 then
    with StringGrid1.Canvas do
      Draw(Rect.Left, Rect.Top, Image1.Picture.Graphic);
 end;

Seguro que si haces una búsqueda por los foros encuentras multitud de ejemplos que te pueden ser de ayuda.

sonjeux 04-05-2008 19:59:14

Gracias, de esa forma si me lo se :P, pense que habia un componente, por que si te das cuenta digamos en el winzip cuando lista archivos, vos puedes hacer clic en el titulo, y este es como un boton :P en ese caso no es un boton, queria un componente ya hecho para eso :P. Y busque en el foro pero no pille algo como lo que quiero :cool:

Casimiro Notevi 04-05-2008 20:43:22

Evidentemente el winzip y todos los programas hacen eso mismo "por debajo"

Neftali [Germán.Estévez] 05-05-2008 16:07:53

Aquí también tienes otro ejemplo en Delphi de cómo dibujar la flechita en los títulos de un DBGrid.

sonjeux 06-05-2008 19:28:19

Gracias, excelente :D


La franja horaria es GMT +2. Ahora son las 01:54:59.

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