XbpComboBox
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
XbpComboBox
Ich mache mal einen neuen Thread auf.
Ein wenig mehr blicke ich jetzt schon durch.
Ich befülle die Box mit einem 2dimensionalen Array.
Das 1.Feld wid in die Box mit additem gepackt. Geht denn dann das 2.Feld verloren? Wie bekomme ich das nacher in das SLE, damit ich das in die DB schreiben kann? Da werde ich nicht schlau draus.
Ein wenig mehr blicke ich jetzt schon durch.
Ich befülle die Box mit einem 2dimensionalen Array.
Das 1.Feld wid in die Box mit additem gepackt. Geht denn dann das 2.Feld verloren? Wie bekomme ich das nacher in das SLE, damit ich das in die DB schreiben kann? Da werde ich nicht schlau draus.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
da mußt Du dann:
Martin
da mußt Du dann:
- den Wert aus dem SLE lesen
- das Array durchsuchen (1. Spalte des Arrays)
- an der gefundenen Stelle den Wert der 2. Spalte in die DB schreiben
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
ich bin gerade drauf gekommen, bzw. teste es aus.
Damit bekomme ich die Nummer der zeile in der Box und die stimmt mit dem Array überein. Dann brauche ich nur noch das 2.Feld auslesen und ich habe die Nummer.
ich bin gerade drauf gekommen, bzw. teste es aus.
Code: Alles auswählen
FUNCTION afrombox( oListBox)
LOCAL aArray := oListBox:getData()
LOCAL nI
FOR nI := 1 TO LEN(aArray)
aArray[nI] := oListBox:getItem( aArray[nI] )
NEXT
RETURN aArray
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
entweder verstehe ich den Satz falsch:
Wenn Du Dein eigentliches Array in der selben Reihenfolge hast, wie die Einträge in der Listbox, dann brauchst Du doch nicht die :getItem abfragen, sondern kannst direkt auf die per :GetData() ermittelten Elemente in Deinem Hauptarray gehen.
Viele Grüße,
Martin
entweder verstehe ich den Satz falsch:
oder Du kannst Dir Deine FOR-Schleife sparen!Manfred hat geschrieben:Damit bekomme ich die Nummer der zeile in der Box und die stimmt mit dem Array überein.
Wenn Du Dein eigentliches Array in der selben Reihenfolge hast, wie die Einträge in der Listbox, dann brauchst Du doch nicht die :getItem abfragen, sondern kannst direkt auf die per :GetData() ermittelten Elemente in Deinem Hauptarray gehen.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
Du verstehst richtig, ich verstehe Dich auch, aber ich kriege das zur Zeit nicht hin. Kannst Du mir kurz helfen?
Ich habe festgestellt, dass ich das SLE überhaupt nicht brauche, weil aus einer fertigen Liste genommen wird. Da genügt es direkt in die Variable zu schreiben, die in die DB kommt.
Du verstehst richtig, ich verstehe Dich auch, aber ich kriege das zur Zeit nicht hin. Kannst Du mir kurz helfen?
Ich habe festgestellt, dass ich das SLE überhaupt nicht brauche, weil aus einer fertigen Liste genommen wird. Da genügt es direkt in die Variable zu schreiben, die in die DB kommt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
Arbeitest Du nun nur mit einer Listbox?
Poste doch mal bitte ein wenig Code...
Viele Grüße,
Martin
Arbeitest Du nun nur mit einer Listbox?
Poste doch mal bitte ein wenig Code...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
So sieht die Combobox aus. Ich habe sie genommen, weil eine Listbox, soweit ich es festgestellt habe, immer aufgeklappt ist.
Code: Alles auswählen
::oComboBox := XbpComboBox():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe-60},{60, 80})
::oComboBox:tabStop := .T.
::oComboBox:type := XBPCOMBO_DROPDOWNLIST // jetzt kann kein Unsinn reingetippt werden
::oComboBox:create()
AEval( aSysteme, {|x,i| ::oComboBox:addItem(aSysteme[i,1])})
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
OK,
dann probiere es doch mal damit:
Alles in einer Zeile und statt Feld_in_der_DB nimmst Du natürlich Deinen entsprechenden Feldnamen (oder die Variable, falls Du nicht direkt auf die DB gehst).
Viele Grüße,
Martin
dann probiere es doch mal damit:
Code: Alles auswählen
oComboBox:XbpSLE:dataLink := {|x| IIf( x==NIL, aSysteme[ascan(aSysteme, { |a| a[ 2 ] == Feld_in_der_DB } ), 1], Feld_in_der_DB := aSysteme[ ascan(aSysteme, { |a| a[ 1 ] == x } ), 2 ] ) }
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
ich habe das gestern Abend so eingetippt, aber irgendwie bleibt der Wert 0. Da ich aber auch noch nicht so richtig weiß, was da passiert, werde ich es mir mal näher ansehen.
Die Combobox nutze ich um aus einer kleinen DB Daten einzulesen und dann eine Verknüpfung zu dieser zu machen. Ist das überhaupt eine vernünftige Entscheidung, sowas über eine Combobox zu regeln? Ich meine, wie mache ich das dann, wenn in der Vater DB später gesucht und dann die Sohn DB mitgeführt werden muß und dann später Änderungen geschehen sollen. Ist dafür eine Combobox überhaupt geeignet, oder sollte ich das besser anders lösen? Es natürlich schön, wenn man die Daten in der Combobox per Eingabe direkt anspringen und anzeigen kann.
ich habe das gestern Abend so eingetippt, aber irgendwie bleibt der Wert 0. Da ich aber auch noch nicht so richtig weiß, was da passiert, werde ich es mir mal näher ansehen.
Die Combobox nutze ich um aus einer kleinen DB Daten einzulesen und dann eine Verknüpfung zu dieser zu machen. Ist das überhaupt eine vernünftige Entscheidung, sowas über eine Combobox zu regeln? Ich meine, wie mache ich das dann, wenn in der Vater DB später gesucht und dann die Sohn DB mitgeführt werden muß und dann später Änderungen geschehen sollen. Ist dafür eine Combobox überhaupt geeignet, oder sollte ich das besser anders lösen? Es natürlich schön, wenn man die Daten in der Combobox per Eingabe direkt anspringen und anzeigen kann.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
ich habe Dich so verstanden, dass Du ein zweidimensionales Array hast. Die Werte in der ersten Spalte stehen zur Auswahl in der Combobox und die Werte der zweiten Spalte stehen in der Datenbank. Also sieht das Ausgangsarray aSysteme z.B. so aus:
In Deiner ComboBox stehen diese Werte:
Ist dem nun doch nicht so??
Meine Zeile macht folgendes:
Der erste Teil (Wert wird aus der Datenbank gelesen und angezeigt):
Das ascan sucht in dem Hauptarray in der zweiten Spalte nach dem Wert, der in der Datenbank hinterlegt ist und liefert die entsprechende Zeile zurück. Als Ergebnis wird dann aus dieser Zeile des Hauptarrays der Inhalt der ersten Spalte an die Combobox übergeben.
In der Datenbank steht eine 2, also liefert der obige Teil das Ergebnis "Zwei" an die Combobox.
Der zweite Teil (Auswahl der Combobox wird entsprechend in die Datenbank geschrieben):
Das ascan sucht in dem Hauptarray in der ersten Spalte nach dem Eintrag, der in der Combobox gewählt wurde und liefert die entsprechende Zeile zurück. Als Ergebnis wird dann aus dieser Zeile des Hauptarrays der Inhalt der zweiten Spalte in die Datenbank geschrieben.
In der Combobox wurde der Eintrag "Eins" gewählt, also schreibt der obige Teil das Ergebnis 1 in die Datenbank.
Viele Grüße,
Martin
ich habe Dich so verstanden, dass Du ein zweidimensionales Array hast. Die Werte in der ersten Spalte stehen zur Auswahl in der Combobox und die Werte der zweiten Spalte stehen in der Datenbank. Also sieht das Ausgangsarray aSysteme z.B. so aus:
Code: Alles auswählen
{ { "Eins", 1 }, { "Zwei", 2 }, { "Drei", 3 } }
Code: Alles auswählen
{ "Eins", "Zwei", "Drei" }
Meine Zeile macht folgendes:
Der erste Teil (Wert wird aus der Datenbank gelesen und angezeigt):
Code: Alles auswählen
aSysteme[ascan(aSysteme, { |a| a[ 2 ] == Feld_in_der_DB } ), 1]
In der Datenbank steht eine 2, also liefert der obige Teil das Ergebnis "Zwei" an die Combobox.
Der zweite Teil (Auswahl der Combobox wird entsprechend in die Datenbank geschrieben):
Code: Alles auswählen
Feld_in_der_DB := aSysteme[ ascan(aSysteme, { |a| a[ 1 ] == x } ), 2 ]
In der Combobox wurde der Eintrag "Eins" gewählt, also schreibt der obige Teil das Ergebnis 1 in die Datenbank.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
sagen wir mal so: Es ist genau so, wie Du es oben beschrieben hast.
Ich werde es jetzt nochmals kontrollieren und versuchen herauszufinden, was hier falsch läuft.
sagen wir mal so: Es ist genau so, wie Du es oben beschrieben hast.
Ich werde es jetzt nochmals kontrollieren und versuchen herauszufinden, was hier falsch läuft.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Ich würde dies in eine eigene Methode auslagern und diese hier aufrufen.Martin Altmann hat geschrieben: dann probiere es doch mal damit:Code: Alles auswählen
oComboBox:XbpSLE:dataLink := {|x| IIf( x==NIL, aSysteme[ascan(aSysteme, { |a| a[ 2 ] == Feld_in_der_DB } ), 1], Feld_in_der_DB := aSysteme[ ascan(aSysteme, { |a| a[ 1 ] == x } ), 2 ] ) }
Kann man leichter debuggen und durchschauen ...
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
nochmal langsam...
nochmal langsam...
Das stimmt so...ich habe Dich so verstanden, dass Du ein zweidimensionales Array hast.
Das ist auch so.Die Werte in der ersten Spalte stehen zur Auswahl in der Combobox
Das verstehe ich jetzt nicht. Die zweite Spalte enthält den Wert, den ich extrahieren muß/will um ihn dann wegzuschreiben. Der Wert steht noch im Array.
und die Werte der zweiten Spalte stehen in der Datenbank.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo,
eine Combobox liefert wie eine Listbox mit getData() ein Array mit Auswahlen zurück.
Wenn du ein 2 dimensionales Array mit 1. Spalte Anzeige und 2. Spalte gewünschter DBF-FeldInhalt hast, kannst du (ohne datalink) so vorgehen:
Mit Datalink wird der Codeblock von DATALINK direkt aufgerufen, sobald du getData() aufrufst, daher darf man :getData() auch nur nutzen, wenn man was speichern will, sonst :editBuffer(). Ein datalink-Codeblock müsste die Logik abbilden, daher kann ich nur abraten das direkt im Codeblock zu schreiben. Eine Funktion/Methode mit Parametern erledigt das zuverlässiger.
Wenn die Lösung nicht zu deinem Problem passt, darfst du sie gerne wegwerfen
eine Combobox liefert wie eine Listbox mit getData() ein Array mit Auswahlen zurück.
Wenn du ein 2 dimensionales Array mit 1. Spalte Anzeige und 2. Spalte gewünschter DBF-FeldInhalt hast, kannst du (ohne datalink) so vorgehen:
Code: Alles auswählen
oCombobox:addItem() wurde geladen mit aAuswahl[nZeile,1]
aErgebnis := oCombobox:getData() // Array mit Ergebnissen,
if len(aErgebnis)>0 // es wurde was gewählt
nErgebnis := aErgebnis[1] // wenn nur eine Auswahlmöglichkeit, sonst suchen.
replace DBF_FELD with aAuswahl[nErgebnis,2] //
endif
...
Wenn die Lösung nicht zu deinem Problem passt, darfst du sie gerne wegwerfen
Gruß
Hubert
Hubert