Zmiana kolejności kolumn w StringGrid

0

Witam,
Przygotowuję program (w Lazarusie 1.0.2), który pobiera dane z pliku CSV do komponentu StringGrid a następnie po korekcie danych zapisuje dane z StringGrid do CSV. Po wczytaniu wszystko ładnie się pojawia w tym komponencie, ale końcowy plik wymaga zamiany kolejności kolumn np:

Wczytany stringgrid:

Imie | Imię2 | Nazwisko | PESEL |
Małgorzata | Milena | Nowak | 999999999|
Jan | | Kowalski | 888888888|

StringGrid właściwy:

PESEL | Nazwisko | Imie | Imię2 |
999999999 |Nowak |Małgorzata | Milena |
888888888 |Kowalski |Jan | |

Czy jest taka możliwość, żeby sortowało StringGrid po pierwszym wierszu wg jakiegoś schematu (np. PESEL, NAZWISKO, IMIE, IMIE2)?
Pozdrawiam
Radek

0

Poradziłem sobie, chociaż nie wiem czy jest to najprostszy sposób:

procedure TForm1.Button1Click(Sender: TObject);
 var i,j:integer;
 begin
 stringgrid3.RowCount:=stringgrid1.rowcount;
  stringgrid3.colCount:=stringgrid1.colcount;
   for j:=0 to stringgrid1.RowCount-1 do
   for i:=0 to stringgrid1.ColCount-1 do
   begin
   if stringgrid1.Cells[i,0]='PESEL' then stringgrid3.Cells[0,j]:=stringgrid1.Cells[i,j];
   if stringgrid1.Cells[i,0]='Nazwisko' then stringgrid3.Cells[1,j]:=stringgrid1.Cells[i,j];
   if stringgrid1.Cells[i,0]='Imie' then stringgrid3.Cells[2,j]:=stringgrid1.Cells[i,j];
   if stringgrid1.Cells[i,0]='Imie2' then stringgrid3.Cells[3,j]:=stringgrid1.Cells[i,j];
   end;
   for j:=0 to stringgrid1.RowCount-1 do
   for i:=0 to stringgrid1.ColCount-1 do
   stringgrid1.Cells[i,j]:=stringgrid3.Cells[i,j];
end;

Pozdrawiam
Radek

1

Napisałem sobie procedurkę do zamiany dwóch wierszy. Da się przerobić na twój użytek.

procedure ExchangeRows(StringGrid:TStringGrid; const r1,r2:Integer);
var s:TStringList;
begin
  s:=TStringlist.Create;
  with StringGrid do
  begin
    s.Assign(Rows[r1]);
    Rows[r1].Assign(Rows[r2]);
    Rows[r2].Assign(s);
  end;
  s.Free;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1