gekoppelte ComboBoxen

Anfängerfragen zum Programmieren mit PureBasic.
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

gekoppelte ComboBoxen

Beitrag 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.
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Wat is jetzt deine Frage oder wartest du darauf das dir einer dat Ding zusammenklöppelt?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag 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.
Antworten