2011-01-05 19 views
2

Ich versuche, eine Flex (Advanced) DataGrid-Komponente mit einem Mechanismus zu machen, wo der Benutzer die Sichtbarkeit der Spalten wechseln kann. Ich habe das grob implementiert, indem ich die Spalten in das Rechtsklick-Menü eingelesen habe, und wenn hier ein Spaltenname ausgewählt ist, wird die Sichtbarkeit umgeschaltet. Es funktioniert, aber es ist nicht die eleganteste Lösung.Adobe Flex DataGrid wählbare Spalten

Insbesondere versuche ich, das "Datagrid" zu emulieren, das Mozilla Thunderbird verwendet, um E-Mails anzuzeigen. Hier ist ein Bild:

thunderbird_datagrid.png

In der oberen rechten Ecke gibt es ein Symbol über die Bildlaufleiste. Wenn keine Bildlaufleiste vorhanden ist, bleibt das Symbol an der gleichen Stelle. Wenn das Symbol klicken, öffnet sich ein Menü, das alle möglichen Spalten zeigt, mit den sichtbaren diejenigen ein Häkchen neben ihnen hat, wie folgt aus:

thunderbird_select_columns.png

Auch immer die Bildlaufleiste unter dieser erscheint Knopf, nie "drängen" es in seine eigene Spalte.

Ich möchte dies in Flex neu erstellen. Ich glaube, der Menü-Teil und das Erstellen einer Spalte mit einer Schaltfläche HeaderRenderer ist einfach genug. Aber ich kann nicht herausfinden, wie (wenn überhaupt möglich) dies mit der Bildlaufleiste zu tun ist, weil die Bildlaufleiste immer "ihre eigene Spalte" zu sein scheint. Irgendwelche Ideen oder Hilfe würden geschätzt. Vielen Dank.

  • Ian
+1

Hallo Ian, Ich habe eine Menge Arbeit mit ADG selbst getan und festgestellt, dass für diese Art von Kontrolle Ihre am Ende eine Erweiterung von ADG erstellen müssen, wenn Sie nicht bereits haben und müssen überschreiben Einige der Methoden betrachten zum Beispiel die AS3 Sprachreferenz geschützten Methoden: drawColumnBackground, drawHeaderBackground, auch um zu bemerken, dass Sie möglicherweise schummeln können, wenn Sie die letzte Spalte vor der Bildlaufleiste als den Container verwenden, um das PopupMenu in und einfach zu haben außerhalb seiner Breite gezeichnet und Clipping ausschalten. – shaunhusain

Antwort

1

Eine schmutzige Lösung in den Sinn kommt. Erstellen Sie eine Komponente basierend auf Canvas und fügen Sie dann ein AdvancedDataGrid hinzu, indem Sie createChildren überschreiben. Überschreibe updateDisplayList und füge eine Schaltfläche wie die in Thunderbird oben rechts im Canvas ein. Dadurch wird die Schaltfläche über dem DataGrid angezeigt. Problemo gelöst?

+0

Hmm, das klingt nach einer interessanten Lösung. Ich werde es wahrscheinlich ausprobieren. Gerade jetzt besteht meine schmutzige Lösung darin, einen Button und eine Liste in eine VBox zu setzen, um als meine Scrollbar-Spalte zu fungieren. Der Button hat dieselbe Höhe wie der ADG-HeaderHeight. Die Liste und das ADG sind an denselben Datenanbieter gebunden, aber die Liste enthält keine Labels für die Elemente. Wenn das ADG also nicht gescrollt werden muss, funktioniert es gut. Wenn dies der Fall ist, scrolle ich den ADG basierend auf dem Scrollen der Liste. – istrasci

+0

Es funktioniert tatsächlich ziemlich nett mit Ausnahme von mouseOver Hervorhebung, wenn es keine Bildlaufleiste, d. H. Wenn Sie Maus über ein Element in der ADG, das entsprechende Element in der Liste ist auch nicht markiert, so dass es ein wenig lustig aussieht. Ich denke, Ihre Lösung könnte dazu beitragen, dies zu vermeiden. – istrasci

+0

Wenn es funktioniert, posten Sie einen Screenshot und Code, wenn es Ihnen nichts ausmacht. Und wähle das als richtige Antwort ;-) – VikramAdith