Browse, bzw. Listbox umsortieren [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Browse, bzw. Listbox umsortieren [ERLEDIGT]
Hi,
ich habe einen Browse, in dem eine unbestimmte Menge Datensätze stehen kann. Jetzt kann es sein, dass die Reihenfolge der Sätze verschoben werden muß. Also entweder vom Anfang ans Ende, oder umgekehrt, oder mittendrin ein paar Stellen höher oder tiefer.
Wie kann man sowas elegant lösen? Entweder über Buttonklick, oder Mouse (drag & Drop).
Ich habe es schon mit einem Zwischensschritt über eine Listbox versucht, verschieben usw. klappt dann, aber dann bekomme ich die Daten nicht wieder zurück in den Browse, bzw. in die Datenbank. Es geht auch um mehrere Felder, die dann umgetragen werden müßten pro Satz. Eine Listbox nimmt ja nur 1 Spalte an.
ich habe einen Browse, in dem eine unbestimmte Menge Datensätze stehen kann. Jetzt kann es sein, dass die Reihenfolge der Sätze verschoben werden muß. Also entweder vom Anfang ans Ende, oder umgekehrt, oder mittendrin ein paar Stellen höher oder tiefer.
Wie kann man sowas elegant lösen? Entweder über Buttonklick, oder Mouse (drag & Drop).
Ich habe es schon mit einem Zwischensschritt über eine Listbox versucht, verschieben usw. klappt dann, aber dann bekomme ich die Daten nicht wieder zurück in den Browse, bzw. in die Datenbank. Es geht auch um mehrere Felder, die dann umgetragen werden müßten pro Satz. Eine Listbox nimmt ja nur 1 Spalte an.
Zuletzt geändert von Manfred am Do, 17. Dez 2009 17:09, insgesamt 1-mal geändert.
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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Browse, bzw. Listbox umsortieren
Willst Du die Anzeige der Datensätze ändern oder deren physikalische Reihenfolge? Für ersteres belege ich den LbClick-Slot der Columnheader und schalte den jeweiligen Index um (sichtbar wird das durch eine farbliche Hervorhebung des Spaltenheaders). Für zweiteres (komplexer und nur bei Tabellen ohne Indexe sinnvoll) reagiere ich im Handler auf LbDown und gestatte Drag & Drop. Ich habe Drag- und DropZone bisher nur bei statischen Elementen ausprobiert.
Herzlich,
Tom
Tom
-
- Rekursionen-Architekt
- Beiträge: 237
- Registriert: Do, 14. Aug 2008 14:59
- Wohnort: Straelen
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 3 Mal
Re: Browse, bzw. Listbox umsortieren
Hallo Manfred,
ich würde zuerst die Daten in ein Array einlesen und dann oBrowse über das Array erzeugen. Wenn ein Programmanwender eine Verschiebeoperation über ein Kontextmenü aufruft (rechte Maustaste) dann wird die zugehörige Verschiebefunktion die Arrayzeilen neu anordnen und anschließend mit oBrowse:refreshall() die Daten im Browser neu anzeigen.
ich würde zuerst die Daten in ein Array einlesen und dann oBrowse über das Array erzeugen. Wenn ein Programmanwender eine Verschiebeoperation über ein Kontextmenü aufruft (rechte Maustaste) dann wird die zugehörige Verschiebefunktion die Arrayzeilen neu anordnen und anschließend mit oBrowse:refreshall() die Daten im Browser neu anzeigen.
Viele Grüße
Dieter
Was man nicht versteht, besitzt man nicht.
Dieter
Was man nicht versteht, besitzt man nicht.
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse, bzw. Listbox umsortieren
Hm, wie soll ich mich jetzt ausdrücken?
ich habe eine Vater Db und eine Sohn DB. Die Sohn DB wird mittels Scope im Browse gefiltert. Wenn ich jetzt in einem weiteren Browse (Auswahlbrowse) mit der Maus auf einem Satz doppelklicke, dann wird eine Funktion aufgerufen, die den angeklickten Satz in die Sohn DB schreibt und dann den Sohn-Browse aktualisiert. So weit so gut. Mit Doppelklick im Sohn Browse kann man den Satz wieder entfernen. Jeder Doppelklick in dem Auswahlbrowse fügt den neuen Satz im Sohn Browse hinten dran. Er steht also jedesmal am Ende. Jetzt kann es aber passieren, dass einer von den Sohn Sätzen verschoben werden muß, weil er an der falschen Stelle steht.
Das muß so passieren, dass beim nächsten Aufruf der Sohn DB der Satz auch neu einsortiert wird, an der Stelle, an der er vorher "geschoben" wurde. Also müßte er auch physikalisch in der DB umgeschoben werden.
Ich hatte das so gedacht, dass ich ein weiteres Feld habe, in dem die Nummer der Reihenfolge steht. Also habe ich alles in eine Listbox übertragen, dort kann ich dann mit Buttons rauf oder runter den markierten Satz verschieben. Das klappt auch alles, aber ich bekomme die neue Reihenfolge nicht wieder zurück ins Browse.
EDIT: irgendwo muß ja die neue Reihenfolge drin stehen, nur im Debugger kann ich kein Array entdecken, mit der neuen Reihenfolge. Immer nur die alte. (ich arbeite mit DCLISTBOX )
ich habe eine Vater Db und eine Sohn DB. Die Sohn DB wird mittels Scope im Browse gefiltert. Wenn ich jetzt in einem weiteren Browse (Auswahlbrowse) mit der Maus auf einem Satz doppelklicke, dann wird eine Funktion aufgerufen, die den angeklickten Satz in die Sohn DB schreibt und dann den Sohn-Browse aktualisiert. So weit so gut. Mit Doppelklick im Sohn Browse kann man den Satz wieder entfernen. Jeder Doppelklick in dem Auswahlbrowse fügt den neuen Satz im Sohn Browse hinten dran. Er steht also jedesmal am Ende. Jetzt kann es aber passieren, dass einer von den Sohn Sätzen verschoben werden muß, weil er an der falschen Stelle steht.
Das muß so passieren, dass beim nächsten Aufruf der Sohn DB der Satz auch neu einsortiert wird, an der Stelle, an der er vorher "geschoben" wurde. Also müßte er auch physikalisch in der DB umgeschoben werden.
Ich hatte das so gedacht, dass ich ein weiteres Feld habe, in dem die Nummer der Reihenfolge steht. Also habe ich alles in eine Listbox übertragen, dort kann ich dann mit Buttons rauf oder runter den markierten Satz verschieben. Das klappt auch alles, aber ich bekomme die neue Reihenfolge nicht wieder zurück ins Browse.
EDIT: irgendwo muß ja die neue Reihenfolge drin stehen, nur im Debugger kann ich kein Array entdecken, mit der neuen Reihenfolge. Immer nur die alte. (ich arbeite mit DCLISTBOX )
Zuletzt geändert von Manfred am Do, 17. Dez 2009 15:12, insgesamt 1-mal geändert.
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!!
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse, bzw. Listbox umsortieren
Hi Dieter,
ich habe zu langsam geschrieben.
das mit dem Array habe ich schon durchdacht, gefällt mir aber nicht, weil es nicht in das Konzept paßt.
Das Problem ist, dass ich 3 Browse nebeneinander habe.
in dem linken ist die Vaterdatei, in der man Browsen kann, die dann gleichzeitig den Browser daneben aktualisiert, mit den Sohndaten. Wenn ich jetzt jedesmal in dem Vaterbrowse mit dem Cursor raus oder runter wandere, müßte jedesmal die DB in ein Array eingelesen, dann angezeigt, danach auf evtl. Änderungen geprüft werden usw. Und das wird wohl den Ablauf recht langsam machen. Zumal man nicht genau sagen kann, wie groß die beiden DB werden
ich habe zu langsam geschrieben.
das mit dem Array habe ich schon durchdacht, gefällt mir aber nicht, weil es nicht in das Konzept paßt.
Das Problem ist, dass ich 3 Browse nebeneinander habe.
in dem linken ist die Vaterdatei, in der man Browsen kann, die dann gleichzeitig den Browser daneben aktualisiert, mit den Sohndaten. Wenn ich jetzt jedesmal in dem Vaterbrowse mit dem Cursor raus oder runter wandere, müßte jedesmal die DB in ein Array eingelesen, dann angezeigt, danach auf evtl. Änderungen geprüft werden usw. Und das wird wohl den Ablauf recht langsam machen. Zumal man nicht genau sagen kann, wie groß die beiden DB werden
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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Browse, bzw. Listbox umsortieren
Wenn Dein Sohn-Browse per Scope angezeigt wird, muss es einen führenden Index geben. Hängst Du jetzt einen Datensatz an, wird der dem IndexKey entsprechend einsortiert. Wenn alle gescopten Datensätze im Sohn-Browse den gleichen Schlüssel (z.B. eine Auftragsnummer) haben, steht er zunächst hinten. Das ist so richtig. Wenn Du den neuen Datensatz im Sohn-Browse jetzt an einer anderen Stelle haben willst, musst Du im Prinzip die Datensatzinhalte vertauschen, wenn Du den Schlüssel nicht ergänzen willst (z.B. Str(Auftragsnr)+Str(MeinePosition)). Das ginge einfach durch zwei kleine Buttons (Pfeil nach oben oder unten, 't' und 'u' aus dem Font "Marlett"), die bewirken könnten, dass die Inhalte des aktuellen Datensatzes und desjenigen darüber oder darunter physikalisch vertauscht werden (z.B. über Scatter()/Gather(), natürlich in Kombination mit DbSkip() - wichtig: Datensatznummern merken), danach markiert man mit oBrowse:Up()/Down() jeweils die neue Position des verschobenen Datensatzes. Wenn Du gestatten willst, dass die Position mit Drag&Drop vertauscht wird, müsstest Du (auch wieder bei Verzicht auf einen ergänzten Index) nicht nur Quell- und Zieldatensatz vertauschen, sondern erst den Quelldatensatz an die Zielstelle verschieben (nur die Inhalte!), und danach alle Datensätze ab dem Zieldatensatz (einschließlich!) um einen nach unten bewegen. Oder nach oben, je nachdem.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse, bzw. Listbox umsortieren
OK,
anders gesagt. Das Verschieben in der Listbox mache ich genau so, wie Du es beschrieben hast. Ich habe nur das Problem das neue Ergebnis aus der Listbox heraus in die DB zu bekommen. Das Ergebnis muß doch irgendwo in der Listbox zu finden sein. Ich kriege aber nur die Daten VOR dem Verschieben. Wo hakt es da wohl?
anders gesagt. Das Verschieben in der Listbox mache ich genau so, wie Du es beschrieben hast. Ich habe nur das Problem das neue Ergebnis aus der Listbox heraus in die DB zu bekommen. Das Ergebnis muß doch irgendwo in der Listbox zu finden sein. Ich kriege aber nur die Daten VOR dem Verschieben. Wo hakt es da wohl?
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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Browse, bzw. Listbox umsortieren
Was ist in Deiner Listbox enthalten? Und wie wird da verschoben? Und was? Und wozu überhaupt eine Listbox?
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse, bzw. Listbox umsortieren
ich hole mir das 1.Feld mit der Bezeichnung in die Listbox und Browse ich. Die Listbox habe ich genommen, weil ich es damit anfänglich prima hinbekommen habe, die Sätze zu verschieben.
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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Browse, bzw. Listbox umsortieren
Das verstehe ich nicht. Eine Listbox enthält Strings, die man mit AddItem() hinzufügt. Was die Listbox tut, das entscheidet man u.a. über die Slots ItemMarked und ItemSelected - und ähnliche Methoden. Eine Verbindung zu irgendeiner Datenbank besteht da erstmal nicht. Bist Du sicher, dass Du von einer Listbox sprichst?
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Browse, bzw. Listbox umsortieren
Hi,
für die Kindtabellen habe ich immer ein zusätzliches Feld, das nur für die Sortierung zuständig ist.
Dieses hat meist 1 oder 2 Nachkommastellen:
cKindID nIndexFeld (Länge muss man sich natürlich gut überlegen )
xxxxxxxx000001
xxxxxxxx000002
xxxxxxxx000003
xxxxxxxx000004
wenn ich nun die "xxxxxxxx000004" nach 2 umsortieren will, replace ich das nIndexFeld mit 2,
Anzeige im Browser abschalten ...
nNeuSortRecNo := recno() // dies ist der zu ändernde Satz
nNeuSortIndexNr := nIndexFeld
refresh der DBF,
replace all nIndexFeld with nIndexFeld+1 for nIndexFeld >= nNeuSortIndexNr .and. recno() <> nNeuSortRecNo
wenn man davor einen SCOPE auf cKindID hat, geht das auch recht schnell.
in der DBF nun auf den gewünschten anzuzeigenden Satz ...
und Browser wieder anschalten und refreshall() !
Diese Methode, die eine Zeile im Hintergrund anders sortiert, muss / kann nun über MAUS drag und drop (habe ich noch nie gemacht) oder per F-Taste (move ein / aus) und AUF / AB gesteuert werden (also F9 -> Verschieben an, AUF oder AB Reihenfolge ändern ... F9 Verschieben ende ...)
für die Kindtabellen habe ich immer ein zusätzliches Feld, das nur für die Sortierung zuständig ist.
Dieses hat meist 1 oder 2 Nachkommastellen:
cKindID nIndexFeld (Länge muss man sich natürlich gut überlegen )
xxxxxxxx000001
xxxxxxxx000002
xxxxxxxx000003
xxxxxxxx000004
wenn ich nun die "xxxxxxxx000004" nach 2 umsortieren will, replace ich das nIndexFeld mit 2,
Anzeige im Browser abschalten ...
nNeuSortRecNo := recno() // dies ist der zu ändernde Satz
nNeuSortIndexNr := nIndexFeld
refresh der DBF,
replace all nIndexFeld with nIndexFeld+1 for nIndexFeld >= nNeuSortIndexNr .and. recno() <> nNeuSortRecNo
wenn man davor einen SCOPE auf cKindID hat, geht das auch recht schnell.
in der DBF nun auf den gewünschten anzuzeigenden Satz ...
und Browser wieder anschalten und refreshall() !
Diese Methode, die eine Zeile im Hintergrund anders sortiert, muss / kann nun über MAUS drag und drop (habe ich noch nie gemacht) oder per F-Taste (move ein / aus) und AUF / AB gesteuert werden (also F9 -> Verschieben an, AUF oder AB Reihenfolge ändern ... F9 Verschieben ende ...)
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse, bzw. Listbox umsortieren
Mist,
wieder nicht korrekt ausgedrückt, bzw. anfangs nicht mit dem Verlauf gerechnet.
Also ich schreibe die Daten aus der Sohn DB in ein Array, das ich dann mit der Listbox anzeige. Dann verschiebe ich die Zeilen in der Listbox. Dann sollte eigentlich in der Listbox, sprich in dem Array der Listbox, die neue Reihenfolge stehen. Tut es aber nicht. Wenn ich mir im Debugger das Array ansehe, dann ist da die alte Reihenfolge drin. Dann lösche ich die Sätze aus der Sohn DB und fülle Sie aus dem Listboxarray in neuer Reihenfolge wieder in die Sohn DB. Soweit die Theorie. Ich kann aber nirgendwo finden, wo denn jetzt die neue Reihenfolge der Listbox abgelegt ist, damit ich diese in die Sohn Db schreiben kann.
wieder nicht korrekt ausgedrückt, bzw. anfangs nicht mit dem Verlauf gerechnet.
Also ich schreibe die Daten aus der Sohn DB in ein Array, das ich dann mit der Listbox anzeige. Dann verschiebe ich die Zeilen in der Listbox. Dann sollte eigentlich in der Listbox, sprich in dem Array der Listbox, die neue Reihenfolge stehen. Tut es aber nicht. Wenn ich mir im Debugger das Array ansehe, dann ist da die alte Reihenfolge drin. Dann lösche ich die Sätze aus der Sohn DB und fülle Sie aus dem Listboxarray in neuer Reihenfolge wieder in die Sohn DB. Soweit die Theorie. Ich kann aber nirgendwo finden, wo denn jetzt die neue Reihenfolge der Listbox abgelegt ist, damit ich diese in die Sohn Db schreiben 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!!
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse, bzw. Listbox umsortieren
Habe ich mir aus einem Beispiel von Roger abgeschaut.
Code: Alles auswählen
FUNCTION streckenPickList(oListBox,aListbox,nMode)
LOCAL aSelected := oListbox:getData()
LOCAL aMove[0]
IF nMode = 1 // es soll nach oben gehen
IF aSelected[1] = 1 // Cursor steht schon am Anfang
RETURN NIL
ENDIF
ELSE // es soll nach unten gehen
IF aSelected[1] = Len(aListbox) // Cursor steht am Ende
RETURN NIL
ENDIF
ENDIF
AAdd(aMove,oListbox:getItem(aSelected[1])) // zwischenspeichern
oListbox:delItem(aSelected[1]) // entfernen aus er Listbox
IF nMode = 1
aSelected[1]--
ELSE
aSelected[1]++
ENDIF
oListBox:insItem(aSelected[1],aMove[1]) // es wird verschoben
oListBox:setData( {aSelected[1] },.T.) // und direkt an der neuen Stelle angezeigt
RETURN(.T.)
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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Browse, bzw. Listbox umsortieren
Vermutlich stehen Deine Daten in "aSelected". Dieses Array aber änderst Du nicht, Du änderst in dieser Funktion nur die Daten der Listbox. Das hier müsstest Du am Ende der Funktion tun, wenn etwas geändert wurde:
Code: Alles auswählen
aSize(aSelected,0)
FOR I := 1 to oListBox:NumItems()
aAdd(aSelected,oListBox:GetItem(i))
NEXT
Herzlich,
Tom
Tom
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Browse, bzw. Listbox umsortieren
Der Einfachheit halber könntest Du aber auch an der Stelle, an der Du dann das Sohn-Browse umsortieren willst, auf diese Weise (NumItems() - GetItem()) vorgehen.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse, bzw. Listbox umsortieren
In aselected steht nur die Nummer der Zeile, in der der Cursor der Listbox steht. Mehr nicht. Der Witz ist aber, dass ich die Verschiebung in der Listbox sehe, aber nirgendwo finden 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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Browse, bzw. Listbox umsortieren
Mit GetItems() sollte das aber möglich sein.aber nirgendwo finden kann.
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Browse, bzw. Listbox umsortieren
Hallo Manfred,
was ist verschieben ?
1. getItem() und zwischenspeichern
2. delItem() altes Item löschen ...
3. InsItem() Item an gewünschter Stelle einfügen ...
und das steht doch oben in deiner Methode
GANZ WICHTIG: Die Listbox HAT KEINE DIREKTE VERBINDUNG AUF DEIN ARRAY !
Du selbst musst dich darum kümmern, wenn du z.B. die 5. Zeile verschieben willst,
diese nicht nur mit delItem() in der Listbox, sondern auch mit adel() im Datenarray zu löschen
und bei InsItem() auch zusätzlich aIns() auszuführen. Bei reinem Löschen ist aRemove() aktuell vorzuziehen,
aber du willst ja immer wieder einfügen.
Das Datenarray musst du somit immer syncron mit der Listbox ändern !
was ist verschieben ?
1. getItem() und zwischenspeichern
2. delItem() altes Item löschen ...
3. InsItem() Item an gewünschter Stelle einfügen ...
und das steht doch oben in deiner Methode
GANZ WICHTIG: Die Listbox HAT KEINE DIREKTE VERBINDUNG AUF DEIN ARRAY !
Du selbst musst dich darum kümmern, wenn du z.B. die 5. Zeile verschieben willst,
diese nicht nur mit delItem() in der Listbox, sondern auch mit adel() im Datenarray zu löschen
und bei InsItem() auch zusätzlich aIns() auszuführen. Bei reinem Löschen ist aRemove() aktuell vorzuziehen,
aber du willst ja immer wieder einfügen.
Das Datenarray musst du somit immer syncron mit der Listbox ändern !
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse, bzw. Listbox umsortieren [ERLEDIGT]
Danke für euren Einsatz.
ich habe das Problem gelöst. Vielleicht etwas kompliziert, aber das Ergebnis stimmt.
das ist der Rest.
ich habe das Problem gelöst. Vielleicht etwas kompliziert, aber das Ergebnis stimmt.
Code: Alles auswählen
********************************************************************************
FUNCTION streckenPickList(oListBox,aListbox,nMode)
LOCAL aSelected := oListbox:getData()
LOCAL aMove[0]
LOCAL nI
IF nMode = 1 // es soll nach oben gehen
IF aSelected[1] = 1 // Cursor steht schon am Anfang
RETURN NIL
ENDIF
ELSE // es soll nach unten gehen
IF aSelected[1] = Len(aListbox) // Cursor steht am Ende
RETURN NIL
ENDIF
ENDIF
AAdd(aMove,oListbox:getItem(aSelected[1])) // zwischenspeichern
oListbox:delItem(aSelected[1]) // entfernen aus er Listbox
IF nMode = 1
aSelected[1]--
ELSE
aSelected[1]++
ENDIF
oListBox:insItem(aSelected[1],aMove[1]) // es wird verschoben
oListBox:setData( {aSelected[1] },.T.) // und direkt an der neuen Stelle angezeigt
// ab hier geht es weiter----------------------------------
aListbox := {}
FOR nI := 1 TO oListbox:numItems()
AAdd(aListbox, oListbox:getitem(nI)) // jetzt werden die neue Werte in das Array geschrieben
NEXT
RETURN(.T.)
Code: Alles auswählen
FOR nI := 1 TO Len(aListbox)
nStelle := AScan(aStrecken, aListbox[nI])
aStrecken[nStelle,5] := nI // jetzt wird die Stelle eingegeben
NEXT
ASort(aStrecken,,,{|aX,aY| aX[5] < aY[5] } ) // und sortieren nach Reihenfolge
(oStrecken:nArea)->(DbGoTop())
DO WHILE ! (oStrecken:nArea)->(Eof())
oStrecken:felderschreiben(oStrecken,,,,,.T.)
(oStrecken:nArea)->(DbGoTop())
ENDDO
nLen := Len(aStrecken)
FOR nI := 1 TO nLen
oStrecken:felderleeren()
oStrecken:idhaltest := aStrecken[nI,2]
oStrecken:idroute := aStrecken[nI,3]
oStrecken:id := aStrecken[nI,4]
oStrecken:felderschreiben(oStrecken,.T.)
NEXT
(oStrecken:nArea)->(DbGoTop())
oBrowseStrecken:refreshAll()
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!!
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse, bzw. Listbox umsortieren [ERLEDIGT]
Hi Hubert,
das die Listbox nicht mit dem Array zusammenarbeitet, ist mir auch so eben siedendheiß aufgefallen. Wieder was dazugelernt. =D>
das die Listbox nicht mit dem Array zusammenarbeitet, ist mir auch so eben siedendheiß aufgefallen. Wieder was dazugelernt. =D>
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!!