Delphi - Egy új üres sor hozzáadásának letiltása a DBGrid-ben

forráskód letöltése
Mai cikkünkben annak járunk utána, miként lehet a DBGrid komponensben elérni azt, hogy amikor az utolsó rekordon állunk, és a lefelé nyilat megnyomjuk, ne jelenjen meg automatikusan egy új üres sor.
Amikor megnyomjuk a lefelé nyilat az utolsó rekordon, valójában egy Insert művelet hajtódik végre. Kapunk egy új üres sort, ami rögtön megnyílik szerkesztésre. Hogy ezt elkerüljük, be kell avatkoznunk a tábla Insert műveletébe. Ezt a BeforeInsert esemény segítségével tehetjük meg, ahol megszakítjuk a beszúrás folyamatát.
procedure TForm1.Table1BeforeInsert(DataSet: TDataSet);
begin
  if CheckLastRow then Abort;
end;
A könnyebb szemléltetés érdekében elhelyeztünk egy jelölőnégyzetet a Form-on, mellyel ki illetve be bekapcsolhatjuk az új sor hozzáadásának figyelését. Ez egy CheckLastRow nevű logikai típusú változónak ad igaz vagy hamis értéket attól függően, hogy figyelni szeretnénk-e az Insert műveletet. Amennyiben bekapcsolt állapotban van, megszakítjuk az Abort eljárás segítségével a beszúrás műveletét. Ezután a DBGrid-en figyelemmel kísérjük a billentyűlenyomásokat.
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
Begin
Megvizsgáljuk, hogy a lefelé nyíl lett-e megnyomva.
  if CheckLastRow and (Key = VK_DOWN) then
    begin
Amennyiben igen, a DisableControls segítségével letiltjuk a rekordok megjelenítését a Grid-ben, majd a következő rekordra mozgatjuk a mutatót.
      Table1.DisableControls;
      Table1.Next;
Ha ennek hatására az adattábla végére érünk, a rekordmutatót eggyel visszafelé mozgatjuk. Ellenkező esetben a Key értékét lenullázzuk és hagyjuk, hogy továbblépjen a mutató.
      if Table1.Eof then
        Table1.Prior
      else
        Key:=0;
Az EnableControls segítségével újra engedélyezzük az adatok megjelenítését.
      Table1.EnableControls;
    end;
end;