Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi einzelne Zeile im DBgrid bearbeiten (https://www.delphipraxis.net/84267-einzelne-zeile-im-dbgrid-bearbeiten.html)

thommymail 14. Jan 2007 13:30


einzelne Zeile im DBgrid bearbeiten
 
Hallo,

ich verwende ein DBGrid. Zur Laufzeit sollen die Zeilen nicht editierbar sein.
Der User soll explizid eine Zeile auswählen und mit der rechten Maustaste in einem Popupmenu auf Bearbeiten klicken. Danach soll die Zeile editierbar sein.

Das habe ich bis jetzt mit folgendem Code realisiert:

Delphi-Quellcode:
procedure TForm_Aendernzubehoer.BearbeitenExecute(Sender: TObject);
begin
DBGrid1.Options := dbgrid1.Options + [dgediting];
end;
Leider habe ich aber noch kein Ereigniss gefunden wo dgediting wieder entfernt werden könnte. Dies soll geschehen wenn die Zeile Verlassen wird, egal ob mit Cursor, Tab oder Maus. Momentan sind nach dem Klick auf Bearbeiten alle Felder Editierbar.

Gibt es eine Möglichkeit das der Cursor im Editiermodus an dem letzten Buchstaben steht? Momentan ist die komplette Zeile markiert.

mfg
Thomas

mkinzler 14. Jan 2007 14:01

Re: einzelne Zeile im DBgrid bearbeiten
 
Delphi-Quellcode:
DBGrid1.Options := dbgrid1.Options - [dgediting];

Union 14. Jan 2007 14:38

Re: einzelne Zeile im DBgrid bearbeiten
 
Du solltest ein StateChange-Ereignis der mit dem Grid verknüpften Datenquelle abfragen, z.B:
Delphi-Quellcode:
procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
   if TDataSource(Sender).State <> dsEdit then
      DBGrid1.Options := dbgrid1.Options - [dgediting];

end;

thommymail 14. Jan 2007 16:25

Re: einzelne Zeile im DBgrid bearbeiten
 
Hallo,

ich habe das StateChange-Ereignis verknüpft.
Allerdings wird dies nur einmal beim Aufbau des Formulars aufgerufen.
Danach nicht wieder und die Zeilen bleiben beim verlassen editierbar.

Union 14. Jan 2007 17:04

Re: einzelne Zeile im DBgrid bearbeiten
 
Also, ich habe das getestet und das Ereignis wird bei jedem Statuswechsel definitiv aufgerufen. Du musst das Ereignis natürlich an die richtige Datenquelle binden (die selbe, die Du auch mit dem Grid verbunden hast).

thommymail 14. Jan 2007 19:21

Re: einzelne Zeile im DBgrid bearbeiten
 
Hallo,

ich habe das im Objektinspektor vom DBGrid unter Datasource im OnState Change Feld eingefügt. Da sollte doch die gleiche Source verwendet werden. Ich habe dann in der entsp. procedure einen Haltepunkt gesetzt. Irgendwie wird bei mir die Prozedure nur beim Programmstart aufgerufen.

Delphi-Quellcode:
procedure TForm_Aendernzubehoer.DataSource1StateChange(Sender: TObject);
begin
if Tdatasource(sender).State <> dsedit then
  dbgrid1.options := dbgrid1.Options - [dgediting];
end;
Dem DBGrid1 ist auch die Datasource1 zugeordnet.
Muß am Grid noch eine Einstellung vorgenommen werden?

mfg

Thomas

thommymail 16. Jan 2007 20:21

Re: einzelne Zeile im DBgrid bearbeiten
 
Hallo,

also ich bin schon mal ein Stück weiter. Der Status ändert sich bei mir auch wenn ich eine Veränderung in der Zeile vornehme. Der Status ändert sich aber nicht wenn ich im Bearbeitungsmodus bin und ich ändere an der Zeile nicht sondern drücke nur die Tab oder Cursour Taste. Da wird automatisch die nächste Zeile bearbeitet. In meinem Fall soll dann aber der Bearbeitungsmodus wieder entfernt sein.

Gibt es dafür auch ein Ereigniss?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz