Czy ktoś zna jakiś sposób na przesuwanie rekordu o 1 w górę lub w dół w DBGrid w Lazarusie?
Plik .dbf utworzyłem w sposób
Dbf:=TDbf.Create(Self);
Dbf.FilePath:=ExePath + 'tablice';
Dbf.TableName:='tablice_d.dbf';
Dbf.FieldDefs.Add('_numer', ftString, 100, False);
Dbf.FieldDefs.Add('_ozn', ftString, 100, False);
Dbf.FieldDefs.Add('_opis', ftString, 100, False);
Dbf.CreateTable;
Dbf.Close;
Dbf.Free;
Oprogramowałem dwa przyciski (W górę i W dół) i to mi fajnie działa dopóki nie jest zaznaczony pierwszy lub ostatni rekord.
Przycisk w górę
procedure TForm27.ToolButton9Click(Sender: TObject);
var cur_nu, cur_oz, cur_op, up_nu, up_oz, up_op: string;
begin
cur_nu:=Dbf2.FieldByName('_numer').AsString;
cur_oz:=Dbf2.FieldByName('_ozn').AsString;
cur_op:=Dbf2.FieldByName('_opis').AsString;
Dbf2.MoveBy(-1);
up_nu:=Dbf2.FieldByName('_numer').AsString;
up_oz:=Dbf2.FieldByName('_ozn').AsString;
up_op:=Dbf2.FieldByName('_opis').AsString;
Dbf2.MoveBy(1);
Dbf2.Edit;
Dbf2.FieldByName('_numer').AsString:=up_nu;
Dbf2.FieldByName('_ozn').AsString:=up_oz;
Dbf2.FieldByName('_opis').AsString:=up_op;
Dbf2.Post;
Dbf2.MoveBy(-1);
Dbf2.Edit;
Dbf2.FieldByName('_numer').AsString:=cur_nu;
Dbf2.FieldByName('_ozn').AsString:=cur_oz;
Dbf2.FieldByName('_opis').AsString:=cur_op;
Dbf2.Post;
end;
I przycisk w dół
procedure TForm27.ToolButton10Click(Sender: TObject);
var cur_nu, cur_oz, cur_op, up_nu, up_oz, up_op: string;
begin
cur_nu:=Dbf2.FieldByName('_numer').AsString;
cur_oz:=Dbf2.FieldByName('_ozn').AsString;
cur_op:=Dbf2.FieldByName('_opis').AsString;
Dbf2.MoveBy(1);
up_nu:=Dbf2.FieldByName('_numer').AsString;
up_oz:=Dbf2.FieldByName('_ozn').AsString;
up_op:=Dbf2.FieldByName('_opis').AsString;
Dbf2.MoveBy(-1);
Dbf2.Edit;
Dbf2.FieldByName('_numer').AsString:=up_nu;
Dbf2.FieldByName('_ozn').AsString:=up_oz;
Dbf2.FieldByName('_opis').AsString:=up_op;
Dbf2.Post;
Dbf2.MoveBy(1);
Dbf2.Edit;
Dbf2.FieldByName('_numer').AsString:=cur_nu;
Dbf2.FieldByName('_ozn').AsString:=cur_oz;
Dbf2.FieldByName('_opis').AsString:=cur_op;
Dbf2.Post;
end;
To mi fajnie działa, ale nie radzę sobie jak zablokować możliwość przesunięcia rekordu w górę jeżeli jest zaznaczony pierwszy górny rekord w DBGrid oraz jak zablokować możliwość przesunięcia rekordu w dół jeżeli jest zaznaczony ostatni dolny rekord w DBGrid.
A może jest całkiem inny sposób na przesuwanie rekordów?