Hallo,
ich bin wieder mal am Verzweifeln.
Ich habe zwei ComboBoxen, welche "gekoppelt werden" sollen (Postleitzahl und Ort). Bei Anklicken der CB "Orte" sollen alle Orte angezeigt werden, bei welchem die PLZ mit der in der CB "PLZ" übereinstimmen. Zusätzlich soll an der ersten Postition ein Item "alle" vorhanden sein, um die Möglichkeit zu haben wieder alle Orte anzuzeigen.
Die Daten werden aus einer Datenbank mit DatabaseQuery(), Felder PLZ und Ort, ausgelesen.
Das ganze soll auch umgekehrt funktionieren.
Ich hoffe wieder mal auf eure Hilfe.
Vielen Dank.
gekoppelte ComboBoxen
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Wat is jetzt deine Frage oder wartest du darauf das dir einer dat Ding zusammenklöppelt?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Wieso willste Comboboxen nehmen?
Wäre ein ListIconViewGadget() zum Anzeigen der Ergebnisse nicht schöner?
Wenn du schon eine Datenbank hast, kannste doch über eine SQL-Abfrage mit Like den Inhalt der andere Box ermitteln.
Hier mal ein nicht ganz perfektes Beispiel, was du dir so zurecht basteln kannst, wie du es brauchst:
Eine Idee, was gemeint ist, solltest du haben.
Viel Erfolg

Wäre ein ListIconViewGadget() zum Anzeigen der Ergebnisse nicht schöner?
Wenn du schon eine Datenbank hast, kannste doch über eine SQL-Abfrage mit Like den Inhalt der andere Box ermitteln.
Hier mal ein nicht ganz perfektes Beispiel, was du dir so zurecht basteln kannst, wie du es brauchst:
Code: Alles auswählen
; Folker Linstedt
; 2008-07-11
; Tutorial 2 kombinierte ComboBoxen
If OpenWindow(0,0,0,400,400,"FL Tutorials",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
ComboBoxGadget(1,5, 10,180,80,#PB_ComboBox_Editable) ; ACHTUNG, fügt Einträge hinzu, auch wenn sie doppelt sind
ComboBoxGadget(2,200, 10,180,80,#PB_ComboBox_Editable);| #PB_ComboBox_LowerCase)
ListIconGadget(3,20,100,300,200,"PLZ",120,#PB_ListIcon_GridLines)
AddGadgetColumn(3,1,"Ort",120)
Orte$="Berlin Archen Hamburg Dresden Hannover Bremen Kiel München Budapest Lübeck Wien Mailand Helsiki Kuckshaven Canada Claudia Brandenburg China"
C=CountString(Orte$," ")
For i=0 To 200
PLZ$=LSet(Str(Random(99999)),5,"0")
Ort$=StringField(Orte$,Random(C)+1," ")
AddGadgetItem(3,-1,PLZ$+Chr(10)+Ort$) ; keine echten PLZs
AddGadgetItem(1,-1,PLZ$)
AddGadgetItem(2,-1,Ort$)
Next
Define Quit, Event, GadgetNr
Repeat
Event=WaitWindowEvent()
If Event=#PB_Event_CloseWindow
Quit=1
ElseIf Event=#PB_Event_Gadget
GadgetNr=EventGadget()
If GadgetNr=1
ClearGadgetItemList(2)
AddGadgetItem(2,-1,"#ALLE")
For i=0 To CountGadgetItems(3)-1 ; Hier dann Datenbank
If FindString(" "+LCase(GetGadgetItemText(3,i,0))," "+LCase(GetGadgetText(1)),1) Or GetGadgetState(1)=0 ; #ALLE
AddGadgetItem(2,-1,GetGadgetItemText(3,i,1))
EndIf
Next
SetGadgetState(2,0)
ElseIf GadgetNr=2 ; Auch als Prozedur möglich, da fast gleich
ClearGadgetItemList(1)
AddGadgetItem(2,-1,"#ALLE")
For i=0 To CountGadgetItems(3)-1 ; Hier dann Datenbank
If FindString(" "+LCase(GetGadgetItemText(3,i,1))," "+LCase(GetGadgetText(2)),1) Or GetGadgetState(2)=0
AddGadgetItem(1,-1,GetGadgetItemText(3,i,0))
EndIf
Next
SetGadgetState(1,0)
EndIf
EndIf
Until Quit
CloseWindow(0)
EndIf
Viel Erfolg

Kinder an die Macht http://scratch.mit.edu/
Je nach Datenumfang würde ich das so regeln:
- 1. Combobox füllen, 2. Combobox leer lassen
- Innerhalb einer Schleife den ausgewählten Eintrag der 1. Combobox nach der Aktivierung der 1. Combobox ermitteln:
- Einfache Abfrage des ermittelten Textes mit einer If-Schleife und Befüllung der 2. Combobox:
Das mit dem Findstring ist ne gute Lösung für umfangreiche Anwendungen dieser Art, würde aber dann eher mit ner Linked Lists arbeiten.
- 1. Combobox füllen, 2. Combobox leer lassen
- Innerhalb einer Schleife den ausgewählten Eintrag der 1. Combobox nach der Aktivierung der 1. Combobox ermitteln:
Code: Alles auswählen
GetGadgetText(1. Combobox)
Code: Alles auswählen
If GetGadgetText(1. Combobox)="01234"
ClearGadgetItemList(2. Combobox) '2. Combobox erstmal leer machen und ...
AddGadgetItem(2. Combobox, -1,"Bumshausen") '.... dann neu füllen
endif