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 FireMonkey Problem bei Nachempfinden einer DBLOOKUPCOMBOBOX (https://www.delphipraxis.net/187299-firemonkey-problem-bei-nachempfinden-einer-dblookupcombobox.html)

news2swen 17. Nov 2015 13:05

FireMonkey Problem bei Nachempfinden einer DBLOOKUPCOMBOBOX
 
Hallo zusammen

Ich habe eben erst mit FireMonkey begonnen, daher sind dies auch meine ersten Versuche mit Bindings zu arbeiten.
Grund für den wechsel von VCL zu FMX ist der Glaube meines Chefs, dass dies die Zukunft sein wird und außerdem die Oberflächen schöner aussehen (letzteres stimmt:wink:)

Ich stehe nun vor folgendem Problem (bei VCL ist es keines):
Ich habe 2 Datasets über Master/Detail miteinander verknüpft. Die Daten habe ich in 2 Stringgrids umgeleitet. Wechsel ich nun im Grid des Masters einen Datensatz, so werden mir die verknüpften DS im Detailgrid angezeigt. So war es im VCL mit den DB-Komponenten ja auch.
Jetzt möchte ich aber nicht mit Grids hantieren, sondern lieber ComboBoxen nehmen. Sprich, ich wähle in CB1 einen DS aus und der Inhalt der LookUpData in CB2 aktualisiert sich entsprechend.
Ich weiß nur nicht, wie das gehen soll. Ich habe zwar die Eigenschaft Item.Text der Detail-Box mit meinem DB-Feld verknüpft (es werden sogar Daten angezeigt), aber wenn ich mich durch den MasterGrid bewege, ändert sich am Inhalt der Combobox nichts. Wie bekomme ich das aktualisiert? Mein erster Gedanke war, die Synch-Eigenschaft der Box an meine BindingSourceDB zu hängen, aber da hängt sich das Programm beim Versuch einen Master-Datensatz auszuwählen auf.

Ich hoffe ihr habt da ein paar gute Hinweise

VG
Swen

mkinzler 17. Nov 2015 13:09

AW: FireMonkey Problem bei Nachempfinden einer DBLOOKUPCOMBOBOX
 
Notfalls über den AfterScroll-Event des Master DataSet den Filter auf das Detail DataSet setzen.

news2swen 17. Nov 2015 13:37

AW: FireMonkey Problem bei Nachempfinden einer DBLOOKUPCOMBOBOX
 
Das bringt leider auch nichts. Ich habe die Master-Detail-Beziehung aufgelöst und setze den Filter vorübergehend per Button. Ist SYNCH gebunden, so hängt sich das Programm auf, ist es nicht gebunden, werden die Daten in der ComboBox nicht gefiltert.

news2swen 19. Nov 2015 08:22

AW: FireMonkey Problem bei Nachempfinden einer DBLOOKUPCOMBOBOX
 
Hat wirklich keiner eine Idee, wie ich die Combobox update, wenn sich der Inhalt der Lookup-Datenquelle ändert?:(

Perlsau 19. Nov 2015 09:05

AW: FireMonkey Problem bei Nachempfinden einer DBLOOKUPCOMBOBOX
 
Zitat:

Zitat von news2swen (Beitrag 1321805)
Hat wirklich keiner eine Idee, wie ich die Combobox update, wenn sich der Inhalt der Lookup-Datenquelle ändert?:(

Was ändert sich denn jetzt genau?
  1. Der Inhalt der Mastertabelle?
  2. Der Datensatzzeiger der Mastertabelle?
  3. Der Inhalt der Subtabelle?
  4. Der Datensatzzeiger der Subtabelle?
Als Lookup-Tabelle bezeichnet man normalerweise (falls man diesen Begriff überhaupt verwendet) die Subtabelle, also jene Tabelle, deren PrimaryKey mit dem entsprechenden Foreign-Key der Master-Tabelle korrespondiert. Geht es also um eine Änderung des Inhalts der Subtabelle, mußt du einfach den Einlesevorgang – also jene Methode, mit der du die Combobox befüllst – wieder aufrufen. Geht es jedoch darum, innerhalb der Combobox einen Eintrag auszuwählen, dann sei dir die Methode IndexOf empfohlen:

Delphi-Quellcode:
Combo.ItemIndex := Combo.Items.IndexOf('Suchwort');
War es vielleicht das, was du gesucht hattest? Dann wäre die Frage gewesen: Wie ermittle ich bei einer ComboBox den Index eines bestimmten Eintrags? Das hätte vermutlich jeder sofort verstanden. So aber hast du erstmal keine Antworten erhalten, weil niemand weiß, was genau du willst und nicht jeder so wie ich Zeit und Muse hat, da groß herumzuraten ...

news2swen 19. Nov 2015 10:14

AW: FireMonkey Problem bei Nachempfinden einer DBLOOKUPCOMBOBOX
 
Hallo Perlsau

ich versuchs nochmal:
Ich habe 2 Tabellen, welche über Master-Detail verknüpft sind. Ziel ist es, für eine nachfolgende Funktion Parameter aus diesen beiden Tabellen zu bestimmen. Scrolle ich durch den Master (im Augenblick sind nur die Grids eingebunden), ändern sich logischerweise der Datensatzzeiger der Mastertabelle und der Inhalt der Deatiltabelle. Nun wähle ich in der Detailtabelle einen beliebigen DS aus und starte meine Funktion mit Übergabe des ausgewählten Datenfeldes (subqry.fieldbyname('id').asstring).
Da das optisch/platztechnisch nicht der Stein der Weisen ist, möchte ich die Grids durch ComboBoxen ersetzen. Dazu habe ich zuerst eine Combobox für die Subtabelle eingefügt (Grids sind zur Kontrolle der Daten noch da). Binde ich die Combobox an die Tabelle (ohne SYNCH zu binden), so werden nur die DB-Einträge der Subtabelle angezeigt, welche mit dem ersten Datensatz der Mastertabelle verknüpft sind. Bewege ich mich nun durch den Master, so wird zwar das Detailgrid aktualisiert, nicht aber der Inhalt der Combobox. Binde ich SYNCH an die Detailabfrage (weil ich vermute, dass dadurch die Daten aktualisiert werden) und versuche mich anschliessend in der Mastertabelle zu bewegen, so hängt sich das Programm auf.

In der VCL (ohne dem Livebinding) funktionierte das alles wunderbar. Habe ich im Master einen neuen DS ausgewählt, so wurde der "lookup" des Detail-DBlookupcombobox automatisch aktualisiert.

Ich hoffe, dass mein Problem nun klarer rüber gekommen ist.

Gruß
Swen


Alle Zeitangaben in WEZ +1. Es ist jetzt 20: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