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] +
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.Strings[(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;
//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.Strings[(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!!