![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: FibPlus
Problem mit DBLookupLisBox
Huhu,
ich habe auf einem Formular eine DBLookupLisBox, welche von einer DB-Abfrage mit Werten gefüllt wird. Weiterhin befülle ich alle anderen Controls auf diesem Formular mit Daten einer DB-View. Nun enthält die View einen Wert, der beim Aufruf des Formulars in der DBLookupLisBox selektiert werden soll. Wie stelle ich das am besten an? Wie kann ich das passende Item selektieren? Wie kann ich den Wert der View an die LisdtBox übergeben und diesen markieren? Viele Grüße, Tom |
Re: Problem mit DBLookupLisBox
Wenn ich das richtig interprätiere hast du eine Datasource an der ein paar Datensensitive Steuerelemente.
Du möchtest eine DBLookupCombobox hinzufügen, in der du die Datensätzen bequem wechseln kannst. Wenn das so ist, nimm einfach eine DBLookupkombobox, trage die Datasource, die du für die anderen Controls verwendest, in der Eigenschaft "ListSource" der DBLookupkombobox ein. Dann wählst du ein aussagekräftiges Feld (z.B. "Bezeichnung" o.Ä.) als ListField und ein eindeutiges Feld (z.B. "ID" oder "lfdNr") als KeyField. Die Eigenschaften "DataSource" und "DataField" bleiben bei der DBLookupkombobox in diesen Fall LEER. Das wars dann auch schon. |
Re: Problem mit DBLookupLisBox
Hm, ich glaube du hast meine Frage falsch verstanden.
Die ListBox ist mit einer Datenmenge verbunden, das Key Field ist der PK, und das ListField ist ein TextFeld. Es wird auch alles angezeigt wie es soll. Mit einer DataSource+DataField ist die ListBox nicht verbunden. Nun gibt es auf dem Formular ein DBGrid, in welchem eine Spalte vorhanden ist, die einen Wert enthält, der auch in der ListBox ist. Das Grid wird mit einer DB-View gefüllt. Die DB-View ist nicht aktualisierbar, und liefert nur die Daten, die auf dem Formular per Edit´s und einer SP geändert werden können. Wenn ich nun im Grid auf einen DS gehe, möchte ich, daß der Wert aus der Betreffenden Spalte in der ListView selektiert wird. Die ListView und das Grid kann ich nicht über eine DataSource verbinden, da die Daten im Grid eingachränkt sind. Ich muß also den Wert im Grid mit den Werten in der ListView vergleichen, und die Übereinstimmung in der ListView selektieren. Wie kann ich das lösen? Hab schon alles Mögliche rumprobiert, hat aber alles nicht funktioniert *grübel* Ich hoffe, daß meine Frage einigermaßen verständlich ist :roll: Grüße, Tom |
Re: Problem mit DBLookupLisBox
ist es nun ein ListView oder eine DBListbox ?
Lt. deiner Beschreibung würde ich eher auf die DBListBox tippen. Wenn die DBListBox und das DBGrid an zwei unterschiedlichen Datenquellen hängen, dann kannst du beide Datenquellen via LOOKUP miteinander verbinden. Angenommen die Datenquelle deines DBGrids hat eine Spalte "Bezeichnung" und Datenquelle der DBListbox hat ebenfalls eine Spalte die Bezeichnungen enthält (z.B. 'Artikelbezeichnung'), dann kannst du das wie folgt lösen... Da beim Wechseln des aktuellen Datensatzes im DBGrid ebenfalls der Datensatz-Zeiger dessen Datenmenge (ich nenne diese mal "qry_DBGrid") verschoben wird, kannst du die Datensatz-Positionierung der "DBListbox-Datenmenge" (die nenne ich mal tbl_ListBox) im onAfterScroll von "qry_DBGrid" erledigen.
Delphi-Quellcode:
Falls ich dich immernoch falsch verstanden habe mach doch mal bitte einen Screenshot und beschreibe die Datenmengen sowie wie betroffenen Felder etwas näher. Sonst wird das hier eher ein Ratespiel ... :roll:
procedure TForm1.qry_DBGridAfterScroll(DataSet: TDataSet);
begin // Hier Abbrechen, falls folgende Bedingungen erfüllt sind if (NOT tbl_ListBox.Active) OR // Die Datenmenge der DBListBox ist nicht aktiv (NOT Form1.Visible) OR // Das Formular wird nicht angezeigt (NOT DBGrid.Focused) OR // Das DBGrid hat nicht den Focus (Loading) THEN // benutzerdef. private boolsche Variable, die gesetzt werden kann, wenn z.B. // Massenänderungen, Lookups usw. auf der Datenmenge ausgeführt // werden, bei denen eine Positionierung der DBListBox unnötig ist begin // mach einfach nichts exit; end else begin // versuche den Inhalt von "qry_DBGrid->Bezeichnung" in "tbl_ListBox->ArtikelBezeichnung" zu finden if tbl_ListBox.locate('ArtikelBezeichnung',Dataset.Fieldvalues['Bezeichnung'],[]) then ShowMessage('Gefunden, der aktive Datensatz in der DBListBox ist gesetzt') else ShowMessage('In der DBListBox gibt es keinen Datendatz mit der Artielbezeichnung '+Dataset.FieldByName('Bezeichnung').AsString ); end; end; Schöne Grüße, Jens :hi: |
Re: Problem mit DBLookupLisBox
Hallo Jens,
super, das isses :thumb: An Locate hab ich garnicht gedacht. Natürlich meinte ich eine ListBox, bin eben schon etwas gaga vom ewigen rumprobieren. Vielen Dank! Viele Grüße, Tom |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 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