DBGrid und RxDBGrid Zugriff auf den editierten Text ohne den Datensatz zu speichern

Rund um die LCL und andere Komponenten
Antworten
LazarusFuchs
Beiträge: 16
Registriert: Mo 19. Aug 2013, 22:28

DBGrid und RxDBGrid Zugriff auf den editierten Text ohne den Datensatz zu speichern

Beitrag von LazarusFuchs »

https://lazarus.intern.es/erweiterung_d ... bgrid.html

Der Download befindet sich auf der verlinkten Seite.

DBGridNew und RxDBGridNew erlauben den Zugriff auf den Inhalt des Editors während eine Zelle editiert wird. Das ist ursprünglich
nicht vorgesehen. Ich brauche das für eine bestimmte Anwendung, wollte aber in die bestehenden Komponenten nicht eingreifen. So habe ich die abgeleiteten Komponenten TRxDBGridNew und TDBGridNew entwickelt, um dies durchführen zu können.

Der Zugriff kann zum Beispiel hilfreich sein wenn man aufgrund der derzeitigen Eingabe in einer übergeordneten Tabelle mit Locate suchen will.

Das alles ist mit einem Beispielprogramm als Zip-File zum Download bereitgestellt.

Die Komponenten befinden sich im Verzeichnis „NewDBGridsPackages“ und können mit „lem.lpk“ installiert werden. Diese erscheinen dann im Reiter „Lem“.

Bei den Icons habe ich mir zur Zeit keine Mühe gegeben. Aber ich bin sicher dass diese Komponentenableitungen noch einige Zusätze erfahren werden und dann gibt es auch passende Icons dazu.

Im Verzeichnis Testprogramm ist das Beispielprogramm.

procedure TForm1.DBGridNew1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

Begin
{ Um unten immer die aktuellen Daten anzuzeigen }
{ To show always the correct data }

Label1.Caption:= '';
Label2.Caption:= '';
Label3.Caption:= '';

{ Der momentan im Editor geänderte Text }
{ The changed text in the editor }
Label1.Caption:= DBGridNew1.EditedValue;

{ Das verwendete Datenbankfeld }
{ The active database field }
Label2.Caption:= (Sender as TDBGridNew).SelectedField.FieldName;

{ Reaktion auf ein bestimmtes Feld }
{ Reaction of a concrete field }
if Label2.Caption= 'FieldB' then Label3.Caption:=
'Treffer/FieldB: '+DBGridNew1.EditedValue;
end;

Hier wird im Ereignis KeyUp der neue Editorinhalt mittels „EditedValue“ übernommen (DBGridNew1.EditedValue) und dann angezeigt. Die Ereignisse KeyDown und KeyPress liefern den Inhalt vor der Veränderung. Der letzte edierte Wert bleibt so lange bestehen bis erneut editiert wird oder die x/y-Postion im (Rx)DBGridNew verändert wird. Dies kann man mit Klick auf „Value Now“ überprüft werden. Durch Abfrage des Feldnamens kann gezielt auf einzelne Spalten reagiert werden, auch wenn diese im Grid verschoben werden.

Das Ganze ist durch das Beispielprogramm an und für sich selbsterklärend.
Wer eines der beiden Grids nicht verwendet kann dieses ausklammern. Ich habe DBGrid hinzugefügt weil ich denke dass das doch sehr häufig verwendet wird.

Antworten