Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #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: 38
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
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 20:20:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi