Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-06-2011
Avatar de dandia28
dandia28 dandia28 is offline
Miembro
 
Registrado: dic 2005
Ubicación: Uruguay
Posts: 39
Poder: 0
dandia28 Va por buen camino
Thumbs up Ordenar STringGrid por más de una columna

Hola, tengo un stringgrid, alguien tiene algún ejemplo de ordenamiento por más de una columna? Es decir si tengo dos filas con igual fecha por ejemplo y quiero establecer una segunda columna para ordenar en ese caso como haría? Saludos, Daniel
Responder Con Cita
  #2  
Antiguo 04-07-2011
Avatar de dandia28
dandia28 dandia28 is offline
Miembro
 
Registrado: dic 2005
Ubicación: Uruguay
Posts: 39
Poder: 0
dandia28 Va por buen camino
Ordenar StringGrid

Hola, tengo un stringgrid, alguien tiene algún ejemplo de ordenamiento por más de una columna? Es decir si tengo dos filas con igual fecha por ejemplo y quiero establecer una segunda columna para ordenar en ese caso como haría? Saludos, Daniel
Responder Con Cita
  #3  
Antiguo 04-07-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola dandia28.

Por favor no dupliques los temas, si no obtenes respuesta agregá otro mensaje en el tema original, así pasa a estar en la cabecera del foro como no leída nuevamente ( Guía de estilo punto 6 ). De ese modo evitamos encontrar respuestas duplicadas e inconclusas en las búsquedas.
En este caso combiné los mensajes respetando el primer título que creo es el más representativo.

Saludos y gracias por tu colaboración.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 05-07-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola dandia28.

Una forma de ordenar un StringGrid por cualquier columna:
Código Delphi [-]
implementation
...
type
  TStrGrdExt = class(Grids.TStringGrid); // para acceder al método MoveRow

procedure TForm1.OrdenarGrid(StrGrd: TStringGrid; ACol: Integer);
var
  i,j: Integer;
  Fin: Boolean;
begin
  with TStrGrdExt(StrGrd) do
  begin
    i:= FixedRows;
    Fin:= False;
    while not Fin and (i < RowCount -1 ) do
    begin
      Inc(i);
      Fin:= True;
      for j:= FixedRows to RowCount -2 do
      if Cells[ACol,j] > Cells[ACol,j+1] then
      begin
        Fin:= False;
        MoveRow(j, j+1);
      end;
    end;
  end;
end;
Ejemplo de llamada:
Código Delphi [-]
   OrdenarGrid(StringGrid,1);
A fin de simplificar el ejemplo utilicé el método de ordenamiento bubble sort, que para unos cientos de datos funcionará bién.
Pero para muchos cientos o varios miles te conviene implementar el método shell sort o el quick sort, siendo este último el más rápido.


Con el método quick sort sería más o menos así:
Código Delphi [-]
...
type
  TStrGrdExt = class(Grids.TStringGrid); // para acceder al método MoveRow

procedure TForm1.OrdenarGrid(SG: TStringGrid; ACol,pri,ult: Integer);
var
  i,j: Integer;
  aux: string;
begin
  with TStrGrdExt(SG) do
  begin
    i:= pri;
    j:= ult;
    aux:= Cells[ACol, (i + j) div 2];
    repeat
      while Cells[ACol, i] < aux do Inc(i);
      while Cells[ACol, j] > aux do Dec(j);
      if i <= j then
      begin
        if Cells[ACol,i] <> Cells[ACol,j] then
         MoveRow(i, j)
        else
         Exit;
      end;
    until i > j;
    if j > pri then OrdenarGrid(SG, ACol, pri, j);
    if i < ult then OrdenarGrid(SG, ACol, i, ult);
  end;
end;

Llamada:
Código Delphi [-]
begin
  OrdenarGrid(StringGrid, 1, 0, StringGrid.RowCount-1);
end;


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 05-07-2011 a las 07:53:33. Razón: agregar ejemplo de llamada
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ordenar en un StringGrid chinchan C++ Builder 2 14-10-2008 19:29:59
Ordenar Consulta sin Referencia de Columna trulli Firebird e Interbase 7 25-10-2007 17:49:38
Ordenar un DBGrid por una columna por defecto JM75 OOP 2 04-05-2007 12:46:53
Stringgrid Ordenar datos con click en titulo de columna dmassive Varios 1 20-01-2006 04:09:12
Ordenar Listview por columna Coco_jac Varios 10 03-01-2006 19:03:20


La franja horaria es GMT +2. Ahora son las 18:16:19.


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
Copyright 1996-2007 Club Delphi