![]() |
Datenbank: Access Datenbank • Zugriff über: Zeos libary
DBGrid und DBCheckbox
Hallo,
ich habe ein Problem bei der gleichzeitigen Verwendung von DBGrid und DBCheckbox. Das DBGrid dient zur Anzeige und Auswahl der Datensätze. Rechts daneben werden weitere Details angezeigt, unter anderem auch in 3 DBCheckBoxen. Soweit funktioniert alles prima. Allerdings gibt es Probleme wenn ich nun Werte mit den Checkboxen ändern will. DataSource und DataField sind korrekt eingetragen. Klicke ich nun auf eine Checkbox, so wechselt er wohl in den edit modus. Wechsle ich den Datensatz, speichert er die änderung korrekt ab. Wechsle ich aber z.B. die Page (grid usw. befindet sich in einem TPageControl) ohne vorher den Datensatz zu wechseln, speichert er die neuen Werte der checkbox NICHT ab. In der Delphi hilfe habe ich gelesen, dass mit außnahme des DBGrids bei allen TDBxxx komponenten die Änderung gespeichert wird, wenn die Komponente verlassen wird. Bei DBGrid muss der Datensatz gewechselt werden. ?! (ein wenig komisch wie ich finde) Ich vermute, dass hier das Problem liegt, da nach dem klick auf die DBCheckBox im Grid der Datensatz auch noch im Editmodus angezeigt wird. Gibt es hier eine elegante Lösung? (Dinge wie DBCheckbox.onClick begin xxx.dataset.post; end;, haben leider nicht funktioniert) Oder muss ich eine "normale" Grid Komponente zur Anzeige verwenden ? (und auf das bequeme Datensatzwechseln wie es mit der DBGridbox möglich ist verzichten) Mit freundlichen Grüßen Julian |
Re: DBGrid und DBCheckbox
Herzlich willkommen in der Delphi-PRAXiS, Julian.
Im DBGrid wird ein DataSet in den Edit-Modus versetzt, sobald du anfängst einen Datensatz zu bearbeiten, und er wird gespeichert, sobald du auf einen anderen Datensatz wechselst. Das sind Komfortfunktionen, die du um eine weitere ergänzen möchtest: Auch beim Verlassen des TabSheets mit dem Grid soll der aktuelle Datensatz gespeichert werden. Wie wäre es dann mit dem Ereignis PageControl.OnChanging()? Freundliche Grüße |
Re: DBGrid und DBCheckbox
Hallo Achim,
vielen Dank für die schnelle Antwort. Das hatte ich auch schon versucht:
Delphi-Quellcode:
Allerdings kommt hier die Fehlermeldung "Datensatz weder im Edit- noch im Einfügemodus";
procedure TForm1.TabSheet5Exit(Sender: TObject);
begin try qPersonen.Post; except end; end; Anscheinend wird also das "Rücksetzen" der Daten und das Beenden des Edit modus durch das DBGrid zuerst ausgeführt. auch das OnExit event des DBGrid geht hier leider nicht. Sonst noch eine Idee? MfG Julian |
Re: DBGrid und DBCheckbox
Ich hatte dir das Ereignis OnChanging() nahegelegt, aber du wirst besser wissen, welches Ereignis für dich richtig ist.
Auf jedenfall solltest du kein Post() ausführen ohne vorher den State des DataSet zu prüfen - etwa so:
Delphi-Quellcode:
Freundliche Grüße
procedure TEditForm.PageControlChanging(Sender: TObject;
var AllowChange: Boolean); begin with Sender as TPageControl do if (ActivePage = GridPage) and (ZQuery.State <> dsBrowse) then ZQuery.Post; end; |
Re: DBGrid und DBCheckbox
Guten Morgen...
- ich glaube ich hatte mal das gleiche Problem ( Post wollte nicht beim Tab wechseln ); - ich habe das so gelöst, daß beim Wechseln des Tabs (OnPageControlChange) den aktiven Datensatz immer zum ersten mache (DeinDataset.First) - was da intern passiert kann ich auch nicht erklären, jedenfalls sind die Werte der Checkboxen so wie sie sein sollen :thumb: - Solltest du immer wieder den Datensatzzeiger auf dem gleichen Datensatz benötigen, merkst du dir einfach den aktuellen Datensatz (RecNoAlt:= DeinDataset.RecNo) - dann wieder zurücksetzen (DeinDataset.RecNo:= RecNoAlt) probiers mal aus... :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz