Seite 1 von 1

DCBROWSE mit Combobox [erledigt]

Verfasst: Mi, 20. Nov 2013 15:34
von Ewald
Hallo Gemeinde,
ich biete in einem Browse beim Editieren einzelner Zellen eine Auswahl aus einen Array mittels Combobox an. Dieser Array-Inhalt ändert sich von Zelle zu Zelle und muss vor dem Editieren neu ermittelt werden. Das habe ich mit "gotfocus" realisiert, und obwohl das funktionirt bin mir aber überhaupt nicht sicher, ob das der richtige Ansatz ist. Wo und wie könnte ich denn wohl das Neueinlesen des Array noch erzwingen, bevor der User eine Eingabe in die Zelle macht ?

Code: Alles auswählen

@ 0,0 dcbrowse ....
.
dcbrowsecol field dbstue->index2 header "IDX" parent ob1 width 8 ;
                                 picture "@!" ;
                                 gotfocus {||fidx(getlist)}
                                 editor "XIDX"
.                                 
@  nil, nil DCCOMBOBOX xNIL LIST antx SIZE 12,6 ;
   TYPE XBPCOMBO_DROPDOWN ;
   MESSAGE 'Bitte Index w„hlen' ;
   ID 'XIDX' 

*----------------------------   

function fidx(xlist)
local getlist:={}

asize(antx,0)

xauf("stuekopf",1)
_stuekopf=alias()
seek dbstue->nrkbi1
if found()
do while (_stuekopf)->teilnr=dbstue->nrkbi1
aadd(antx,(_stuekopf)->index)
skip
enddo
endif
close (_stuekopf)

dc_getrefresh(xlist)

return .t. 

Re: DCBROWSE mit Combobox

Verfasst: Mi, 20. Nov 2013 16:26
von Wolfgang Ciriack
Hallo Edwald,
* [EDIT <nEditEvent> | <aEditEvent> ;
[ MODE <nbEditMode>] ;
[ ACTION <bEditAction>] ;
[ EXIT <bEditExit> ] ] ;
ich würde das evtl. in den EDIT ACTION-Block des DCBROWSE packen, der bei Beginn des Editierens ausgeführt wird.
Kommt aber auf den EDIT-Modus an, ich weiss nicht, wenn EDITACCROSS_DOWN gewählt ist, was dann passiert.
Ansonsten evtl. auch in einen GOTFOCUS bei der Combobox ?

Re: DCBROWSE mit Combobox

Verfasst: Mi, 20. Nov 2013 17:14
von Ewald
Hallo Wolfgang,
da habe ich mich nicht exakt ausgedrückt.
Das betrifft nur eine Spalte in der Tabelle. Also nur wenn eine Zelle innerhalb dieser Spalte angeklickt wird soll das Array neu gelesen werden.
Deswegen habe ich die Funktion nicht im Edit Actionblock stehen.

Re: DCBROWSE mit Combobox

Verfasst: Do, 21. Nov 2013 9:44
von Rudolf
Hallo,
schau mal ITEMMARKED Option an, Du kannst das Browse Objekt übergeben und dann schauen in welcher Spalte und Zeile Du bist.
Grüße
Rudolf

Re: DCBROWSE mit Combobox

Verfasst: Do, 21. Nov 2013 10:05
von Tom
GOTFOCUS wäre schon das Mittel der Wahl (es bildet SetInputFocus ab - das Control hat also den Eingabefokus bekommen, was der richtige Moment ist, um zu überprüfen, welche Daten es anbieten soll). ITEMMARKED in DCBROWSE könnte, wie von Rudolf erwähnt, einen Parameter setzen (oder eine Get-Set-Funktion bestücken), der/die darüber Auskunft gibt, ob möglicherweise Änderungen nötig sind. Ansonsten liefert DC_BrowseRow(oBrowse) jederzeit Informationen darüber, in welcher Zeile man sich befindet, worüber man dann - auch im fraglichen Control - z.B. Arrayelemente abfragen kann. Die POINTER-Option von DCBROWSE würde ich nicht verwenden, weil sie meiner Erfahrung nach nicht verlässlich ist.

Re: DCBROWSE mit Combobox

Verfasst: Do, 21. Nov 2013 10:21
von Rudolf
Hallo,
mit Gotfocus und Lostfocus habe ich regelmäßig Probleme, ich glaube es ist nicht zuverlässig, vor allem bei Tabs ist es nachvollziehbar. Pointer verwendet ich sehr oft und habe keine Probleme. Wichtig ist nur die Variable mit 1 vorzubelegen, bei mir hat manchmal die erste Abfrage des Pointers nicht funktioniert.
Grüße
Rudolf

Re: DCBROWSE mit Combobox

Verfasst: Do, 21. Nov 2013 10:54
von Ewald
Hallo geehrte Mitdenker ;-)
Also, ich habe das jetzt mit ITEMSELECTED gelöst. Ich übergebe die Position und verlasse die Funktion sofort wieder, wenn ich nicht in der gewünschten Spalte bin. (Jetzt wo ich das schreibe kommt mir die Formulierung irgendwie seltsam vor ;-))
Ansonsten lese ich das Array neu ein.
Die Variante mit getfocus hat ja auch in 99,99 % der Fälle funktioniert wie ich weiter oben schrub. Aaaber manchmal hatte ich Steuerzeichen im Array stehen oder es war leer, obwohl Daten drinstehen sollten. Klären konnte ich das nicht. Es geht in der Anwendung um Baukastenstücklisten die verschiedene Indizes haben können. Ob und welche Stücklisten vorhanden sind soll dieses Array hergeben. Und es wäre nicht gut für mich, wenn ich eine Stücklistenvariante unterschlagen würde, weil ein Array falsch gefüllt war. Kunden sind da manchmal etwas nachtragend.

Re: DCBROWSE mit Combobox

Verfasst: Do, 21. Nov 2013 11:28
von Rudolf
Hallo Ewald,
wie wäre es mit einem zweiten Browser statt der Combobox ? ich mache es in meinen Stücklisten zumindest so, kommt auf den Platz drauf an den man hat.
Grüße
Rudolf

Re: DCBROWSE mit Combobox

Verfasst: Do, 21. Nov 2013 11:42
von Ewald
Hallo Rudolf,
genau so mache ich es auch seit Jahren. Es erscheint fallweise ein neues Fenster mit einem eigenen Browser für die Auswahl.
Die Lösung mit der Combobox habe ich in den Beispielen gesehen. Das hat einen gewissen Pfiff, und ich wollte das gerne mal probieren.
Zumal mir auf Anhieb etliche Einsatzmöglichkeiten eingefallen sind - wenn ich das stabil zum Laufen bringe.

Re: DCBROWSE mit Combobox

Verfasst: Do, 21. Nov 2013 11:48
von Rudolf
Hallo Ewald,
ich mache es im selben Dialog, also zwei Browser anzeigen, wenn man einen Satz bei den Artikeln wählt dann den zweiten Browser aktualisieren, geht in eXpress++ sehr einfach. Mir ist der Browser bei der Auswahl im eigenen Fenster lieber, er lässt sich einfacher befüllen und hat mehr Möglichkeiten. Ich habe außerdem auch meistens noch andere Elemente wie Buttons zum Neuanlegen, Ändern, Löschen einer Kategorie im Auswahlfenster. Aber wie gesagt, kommt auf den Platz an den man im Dialog hat.
Grüße
Rudolf