Seite 1 von 1

gekoppelte ComboBoxen

Verfasst: 10.07.2008 19:27
von ThoPie
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.

Verfasst: 10.07.2008 20:36
von Fluid Byte
Wat is jetzt deine Frage oder wartest du darauf das dir einer dat Ding zusammenklöppelt?

Verfasst: 11.07.2008 01:26
von Xaby
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:

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
Eine Idee, was gemeint ist, solltest du haben.
Viel Erfolg

:allright:

Verfasst: 11.07.2008 15:48
von CNESM
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:

Code: Alles auswählen

GetGadgetText(1. Combobox) 
- Einfache Abfrage des ermittelten Textes mit einer If-Schleife und Befüllung der 2. 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
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.