Hallo miteinander,
ich hab mal wieder ein Problem.
Folgender Hintergrund: Ich muß eine Liste von Erstatzteilen, die für eine Reparatur gebraucht werden, anzeigen und bearbeiten. Anzeigen tu ich die Liste mittels DevExpress-Grid und bearbeiten mittels der normalen
DB-Komponenten aus
VCL/JVCL, es ist aber auch eine Bearbeitung direkt im Grid möglich.
Die Erstatzteile stehen in einer Tabelle MATERIAL, Zugriff per FibDataset "dsetMaterial". Die für das Problem relevanten Felder sind ARTNR (Artikelnummer) und FEHLERCODEID (ein Fehlercode). Die Fehlercodes stehen in 3 Tabellen, auf die ich ebenfalls per FibDataSet "dsetStdFehler" zugreife. Auswählen kann man die Fehlercodes mittels LookupCombobox "cmbStdFehler". Nun können aber die verschiedenen Ersatzteile unterschiedliche Fehlercodes haben, z.B. kann ein Gehäuseteil verkratzt oder gebrochen sein, während eine Platine verschmort oder gebrochen sein kann usw.
Und genau hier beginnen die Probleme.
1. Wenn man die Artikelnummer ändert (edtArtNr.OnChange), setze ich dsetStdFehler.Filter, um so die Einträge in cmbStdFehler zu ändern. Dies funktioniert aber nur, wenn cmbStdFehler nicht mit den dsetMaterial verknüpft ist (Property DataSource). D.h. ich müßte auf eine AUswahl manuell reagieren, was recht aufwendig ist. Wie kann man das ändern?
2. Da die Fehlercodes für die Artikel unterschiedlich sein können, es sich bei der Fehlercode-Spalte im Grid aber auch um Lookup-Felder handelt, gibt es einen weiteren unschönen Nebeneffekt: Wenn man ein Teil anklickt, werden bei den anderen Teilen nur noch die Fehlercodes angezeigt, die auch für das ausgewählte Teil existieren, die anderen verschwinden. Wie könnte man das lösen? ich habe mir überlegt, für jedes Teil dynamisch ein eigenes DataSet/DataSource zu erzeugen, aber irgendwie erscheint mir das zu "verschwenderisch". Gibt es vielleicht eine "schlankere" Lösung?
Mir sind leider ein bischen die Ideen ausgegangen...