![]() |
Datenbank: Egal • Version: 10.2 • Zugriff über: BDE, FireDAC
TDBComboBox: Auswahl geht verloren bei OnEditMode
Hallo
ich habe eine simple TFDMemTable mit TDataSource und einer TDBComboBox. Die Komponenten sind alle miteinander verbunden, die ComboBox geht auf ein Integer-Feld. In TFDMemTable ist der Event OnBeforeEdit mit einer Abfrage verbunden, ob in den Edit-Modus gewechselt werden soll. Die ComboBox ist im Style=csDropDownList und enthält diverse Integer-Werte in Items.
Code:
Ist die Datenmenge im Edit-Mode, so kann über die Combo der Wert ohne Probleme geändert werden.
if not(FDMemTable1.State=dsEdit) then
if (MessageDlg('in Edit Mode schalten?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes) then Abort; Ist die Datenmenge jedoch nicht im Edit-Mode und wird versucht über die Combo einen Wert auszuwählen, so enthält nach der Auswahl und der Abfrage "in Edit Mode schalten?" der Wert der Combo wieder den Anfangswert. Wahrscheinlich ist dieses Problem schon immer vorhanden, aber jetzt erst aufgefallen. Irgendeine Idee?? Danke |
AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
Zitat:
Und wie geht das "von alleine" in den EditMode? Oder rufst du selbst irgendwo ein .Edit auf? Wenn ja, warum dann nicht davor prüfen? z.B. AutoEdit bei der DataSource auf False setzen. PS: Was ist mit dsInsert? Da darf auch editiert werden. |
AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
Die Beschreibung ist etwas vage, aber ich tippe mal darauf, dass der Dialog einfach den Fokus klaut. Vielleicht hilft es schon, diesen nach der Abfrage wieder auf das Control zu setzen.
|
AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
AutoEdit der DataSource ist True.
Die TDBComboBox möchte die Datenmenge, durch die Auswahl eines Feldwertes im Dropdown, in den Edit-Modus schalten. Wird dieser Vorgang im BeforeEdit der Datenmenge durch ein Abort abgebrochen, so enthält das Control den ausgewählten Wert, wird der Vorgang nicht abgebrochen, dann enthält das Control den vorherigen Wert vor der Änderung * Wert in Control: 1 (Ursprungswert) * Auswahl über Combo: 3 -> möchte automatisch in EditMode wechseln - Abbruch über Abort: Wert in Control: 3 - Kein Abbruch über Abort: Wert in Control: 1 (Ursprungswert) |
AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
Danke, und welches Verhalten möchtest du haben? Du musst entschuldigen, dass wir nicht so tief im Kontext sind wie du.
|
AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
Sorry IMHO ist der Kontext aber eigentlich nicht so tief.
- Abort bei BeforeEdit, Änderungen werden verworfen - kein Abort bei BeforeEdit, Änderungen werden übernommen BTW: Bei normalen Edits klappts ja wie es soll.. |
AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
Zitat:
Zitat:
Aus deinen Ausführungen geht immer noch nicht hervor, ob die Beschreibung des Verhaltens den Soll- oder Ist-Zustand wiedergibt. Der Hinweis auf die normalen Edits bringt vielleicht mehr Informationen, erfordert aber erstmal selbst nachzuprüfen, wie die sich nun genau verhalten um den Unterschied zur TDBComboBox herauszubekommen. Das ist sicher nicht nur für mich mehr Aufwand als ich bereit bin da hineinzustecken. Eine gute Fehlerbeschreibung enthält neben den erforderlichen Schritten auch eine Beschreibung dessen was man erwartet (exp) und dessen was man aktuell bekommt (act). Damit wird wiederholtes Nachfragen in der Regel überflüssig. Solange wir dein Problem nicht verstehen, wirst du vermutlich nur eher unbrauchbare Antworten bekommen - wenn überhaupt. |
AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
Zitat:
(genau habe ichs nicht mehr auf dem Schirm, aber ich glaube, das war einer der Gründe, weswegen ich seit 25+ Jahren einen Bogen um "AutoEdit" mache) |
AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
Arbeitet denn Firedac überhaupt mit Abort?
Ich meine , das ist ja immerhin eine stille Exception. Ich könnte mir vorstellen, dass Firedac bessere Methoden anbietet um diesen Vorgang abzubrechen. geht sowas ?
Delphi-Quellcode:
oder sowas
if not(FDMemTable1.State=dsEdit) then
if (MessageDlg('in Edit Mode schalten?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes) then Begin Dataset.cancel;//Datensatz in den Ursprungs zustand versetzen Abort; end;
Delphi-Quellcode:
if not(FDMemTable1.State=dsEdit) then
if (MessageDlg('in Edit Mode schalten?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes) then Begin TThread.ForceQueue(TThread.Current, Procedure Begin Dataset.cancel; Dataset.editmode := false;// Weiß nicht ob das muss... end; ); Exit; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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