Seite 1 von 1

Browse Header mit Listbox und Sort

Verfasst: Sa, 31. Jul 2010 15:59
von Manfred
Hi,

ich habe einen Array Browser, der es zuläßt, Spalten zu sortieren. Jetzt würde ich ganz gerne auch noch Filter über jede Spalte setzen können. Gibt es da evtl. unter express++ eine einfache Möglichkeit im Header einmal einen Sort und zusätzlich noch eine Listbox einzubauen, in der dann entsprechende Filter eingestellt werden können ala. Excel oder OO-Calc? In der Demo habe ich nichts gefunden.

Re: Browse Header mit Listbox und Sort

Verfasst: Mo, 02. Aug 2010 18:27
von Manfred
hm,

also nicht. Schade.

Re: Browse Header mit Listbox und Sort

Verfasst: Mo, 02. Aug 2010 18:43
von Tom
Häng einfach in den LbClick- oder LbDblClick- oder sonst einen Slot des Column-Headings, den Du dafür verwenden willst, einen Codeblock, der dann an dieser Stelle ein Popup-Menü mit den Filtermöglichkeiten anzeigt. Und nach einer entsprechenden Auswahl filterst Du eben. Die Anwendungsmöglichkeiten sind zu vielfältig und unterschiedlich, um da einen Standard anzubieten. Es gibt auch viele Möglichkeiten, um ein Array zu "filtern". Denkbar wäre eine Veränderung des Skip-Blocks des Browses, aber einfacher ist es i.d.R., eine Kopie des Arrays anzulegen, das nur die "gefilterten" Elemente enthält.

Code: Alles auswählen

DCBROWSECOL ... OBJECT oColumn EVAL {|o|o:Heading:LbDblClick := {||oMeinFilterMenue:Popup(oColumn,{1,1})}}

DCSUBMENU oMeinFilterMenue
DCMENUITEM 'Nur dieser Kunde' PARENT oMeinFilterMenue ACTION {||FilterArray(oBrowse,aArray),DC_GetBrowArray(oBrowse,aArray),oBrowse:RefreshAll()}
usw.

Edit: Code korrigiert.

Re: Browse Header mit Listbox und Sort

Verfasst: Mo, 02. Aug 2010 19:06
von Manfred
Hi Tom,

auf die Idee mit dem PopUp Menu bin ich auch vor ca. 30 Minuten gekommen. Ich dachte zu Anfang halt nur an diesen schönen Effekt mit dem Header.

Re: Browse Header mit Listbox und Sort

Verfasst: Mo, 02. Aug 2010 19:18
von Tom
Hallo, Manfred.

Um das Heading entsprechend zu gestalten, müsstest Du eine eigene XbpCellGroup-Klasse schreiben (bzw. vom Original ableiten), die die Header entsprechend zeichnet und dann auch adäquat reagiert. Das ist keine triviale Aufgabe. Schau Dir einfach mal in _DCXBROW.PRG (..\Source\Dclipx) an, was Roger getan hat, um bei Array-Sortierungen in Browses die kleinen Pfeile (Marlett-Character) anzuzeigen. Dann bekommst Du eine Ahnung. :wink:

Re: Browse Header mit Listbox und Sort

Verfasst: Mo, 02. Aug 2010 19:30
von Manfred
Ah, Danke Tom für den kleinen Hieb auf den Hinterkopf

Re: Browse Header mit Listbox und Sort

Verfasst: Mo, 02. Aug 2010 23:53
von AUGE_OHR
Manfred hat geschrieben:auf die Idee mit dem PopUp Menu bin ich auch vor ca. 30 Minuten gekommen. Ich dachte zu Anfang halt nur an diesen schönen Effekt mit dem Header.
du kannst doch beides haben wenn du:
1.) die Position und Grösse des Header (XbpCellGroup) hast
2.) dein Popup "genau" über den Header legst, Popup:Show() und du es dann "aufklappst"
3.) mit Popup:hide() wird es danach "verborgen" und könnte für den "nächsten" Header neu verwendet werden.

Re: Browse Header mit Listbox und Sort

Verfasst: Di, 03. Aug 2010 13:12
von Tom
Jimmy hat recht. Im Prinzip könntest Du einfach einen mehrzeiligen Header erzeugen, bei dem Zeile 2 und 3 (oder so) leer bleiben, und in diesen Bereich des Headers eine Listbox packen, ihn also teilweise damit überlagern. Positionierung und Resizing dürften nicht ganz umkompliziert werden, aber prinzipiell ist das machbar. Vermutlich müsstest Du bei der Verwendung von eXpress++ die Listboxen blind bzw. hidden erzeugen und dann in der EVAL-Klausel von DCREAD entsprechend positionieren. Einfacher wäre es, die Listboxen direkt über den Headern anzuzeigen. :wink:

Re: Browse Header mit Listbox und Sort

Verfasst: Di, 03. Aug 2010 13:25
von Manfred
Hm,

das mit den Listboxen über dem Header hatte ich mir auch schon überlegt, aber ich bin mir nicht sicher, wie kompliziert es ist, die Listbox dann der Breite der darunterliegenden Browserspalte anzupassen, wenn diese geändert werden sollte. Und das brauche ich sicherlich.

Re: Browse Header mit Listbox und Sort

Verfasst: Di, 03. Aug 2010 13:31
von Tom
Dafür müsstest Du Deine eigene Resize-Funktion bauen, die nach Rogers implizitem Resize aufgerufen wird, falls Du mit der AUTORESIZE-Klausel arbeitest. Du müsstest Position und Größe des Browses und die Größen aller Spalten (oBrowse:GetColumn(n):CurrentSize()) abfangen und darauf reagieren. Keine leichte Aufgabe, aber eine schöne, bei der man viel lernen kann. :wink:

Re: Browse Header mit Listbox und Sort

Verfasst: Di, 03. Aug 2010 13:34
von Manfred
Autsch,

ich dachte eigentlich nur an die Breitenänderung durch Doppelklick im Header. An Autoresize, bzw. resize hatte ich noch gar nicht gedacht. Das muß ja auch berücksichtigt werden.....