Ver Mensaje Individual
  #2  
Antiguo 04-05-2008
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Reputación: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita