jueves, 3 de mayo de 2012

Ordenar un StringGrid

En realidad nunca he sido muy adepto a los stringrid, pero cuando me dijieron que necesitaban ordenar uno, no me quedo otra mas que analizarlo y desarrollar el requerimiento...quizas no sea la mejor opcion pero funciona y bien ;)

manos a la obra:

procedure TForm1.OrdenaStringGrid(var GeneraStrGrid: TStringGrid; Columna: Integer);
const
  // Define separador
  ElSeparador = '@';
var
  Contador, I, J, K, Posicion: integer;
  MiLista: TStringList;
  MiCadena, CadenaTemp : string;
begin
  // Obtener Numero de Filas en el StringGrid
  Contador := GeneraStrGrid.RowCount;
  //Crea la lista
  MiLista :=  TStringList.Create;
  MiLista.Sorted := False;
  try
    for I := 1 to (Contador - 1) do
    MiLista.Add(GeneraStrGrid.Rows[I].Strings[Columna] + 
                       ElSeparador +
                       GeneraStrGrid.Rows[I].Text);
    //Ordena la lista
    MiLista.Sort;

    for K := 1 to MiLista.Count do begin
      //toma el string de la linea (K  1)
      MiCadena := MiLista.Strings[(K - 1)];
      //Encuentra la posicion del separador en la cadena
      Posicion := Pos(ElSeparador, MiCadena);
      CadenaTemp := '';
      {Elimina el texto de la columna que estamos ordenando}
      CadenaTemp := Copy(MiCadena, (Posicion + 1), Length(MiCadena));
      MiLista.Stri
ngs[(K - 1)] := '';
      MiLista.Strings[(K - 1)] := CadenaTemp;
    end;

    // copiar datos al stringgrid
    for J := 1 to (Contador - 1) do
    GeneraStrGrid.Rows[J].Text := MiLista.Strings[(J - 1)];
  finally
      //liberamos la lista
      MiLista.Free;
  end;
end;

procedure TForm1.btnOrdenarClick(Sender: TObject);
begin
  // Sort the StringGrid1 on the second Column
  // StringGrid1 nach der 1. Spalte sortieren
  SortStringGrid(StringGrid1, 1);
end;
 
 
Eso era todo...nos vemos pronto!!

No hay comentarios:

Publicar un comentario