AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBGrid und DBCheckbox
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid und DBCheckbox

Ein Thema von braini4c · begonnen am 26. Jul 2008 · letzter Beitrag vom 27. Jul 2008
Antwort Antwort
braini4c

Registriert seit: 26. Jun 2008
13 Beiträge
 
#1

DBGrid und DBCheckbox

  Alt 26. Jul 2008, 18:10
Datenbank: Access Datenbank • Zugriff über: Zeos libary
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: DBGrid und DBCheckbox

  Alt 26. Jul 2008, 18:34
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
  Mit Zitat antworten Zitat
braini4c

Registriert seit: 26. Jun 2008
13 Beiträge
 
#3

Re: DBGrid und DBCheckbox

  Alt 26. Jul 2008, 19:19
Hallo Achim,
vielen Dank für die schnelle Antwort.
Das hatte ich auch schon versucht:
Delphi-Quellcode:
procedure TForm1.TabSheet5Exit(Sender: TObject);
begin
  try
    qPersonen.Post;
  except
  end;
end;
Allerdings kommt hier die Fehlermeldung "Datensatz weder im Edit- noch im Einfügemodus";
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: DBGrid und DBCheckbox

  Alt 26. Jul 2008, 20:06
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:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#5

Re: DBGrid und DBCheckbox

  Alt 27. Jul 2008, 09:19
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

- 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...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 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