Flex DataGrid mit ComboBox itemRenderer

8

Ich versuche nicht, den "richtigen" Weg zu finden, eine ComboBox in ein Flex (3.4) DataGrid einzubetten. Nach Rechten (z. B. nach dieser Seite Ссылка ) Es sollte einfach sein, aber ich kann nicht für das Leben von mir diese Arbeit machen.

Der Unterschied zu dem oben verlinkten Beispiel besteht darin, dass mein Anzeigewert (was der Benutzer sieht) anders ist als der ID-Wert, den ich auswählen und in meinem Datenprovider speichern möchte.

Also was ich habe ist:

%Vor%

Wo transactionTypesData sowohl 'data' als auch 'label' Felder hat (nach was ComboBox - warum in der Welt gibt es keine labelField und idField Ich werde es nie wissen).

Jedenfalls funktioniert der obige MXML-Code nicht auf zwei Arten:

  1. Das Kombinationsfeld wird nicht mit einem ausgewählten Element angezeigt.
  2. Nach der Auswahl eines Elements wird das ausgewählte Element nicht im Datenspeicher gespeichert.

Hat jemand also eine ähnliche Situation?

    
Jamie Love 11.09.2009, 02:43
quelle

3 Antworten

5

Während Jeffs Antwort ist eine partielle Antwort für einen Ansatz dafür (siehe Ссылка ) für ein vollständiges Beispiel dieses Seins verwendet, um gute Wirkung), es ist nicht so allgemein wie ich wollte.

Zum Glück habe ich endlich eine gute Hilfe bei Expert Exchange gefunden Antworten von hobbit72) beschreibt, wie Sie eine benutzerdefinierte Komponente erstellen, die in einem Raster als ItemRenderer funktioniert. Ich habe diesen Code erweitert, um auch die Verwendung des Kombinationsfelds als ItemEditor zu unterstützen. Die vollständige Komponente lautet wie folgt:

%Vor%

Die Verwendung dieser Komponente ist einfach. Als ItemRenderer:

%Vor%

Die Verwendung dieser Komponente ist einfach. Und als ItemEditor:

%Vor%

Beachten Sie, dass bei der Verwendung als ItemEditor eine benutzerdefinierte labelFunction (die in meinem Fall den Namen aus der PersonID sucht) verwendet werden muss. Andernfalls wird nur der Schlüssel im Raster angezeigt, wenn das Feld nicht bearbeitet wird ( kein Problem, wenn Ihre Schlüssel / Werte gleich sind).

Beachten Sie, dass in meinem Fall das Element focus out-Ereignis propagiert werden sollte, um dem Benutzer sofort Feedback zu geben (mein DataGrid hat itemFocusOut="handleChange()" ), daher das Ereignis change , das ein ITEM_FOCUS_OUT-Ereignis erstellt.

Beachten Sie, dass es wahrscheinlich einfachere Möglichkeiten gibt, eine ComboBox als ItemEditor zu verwenden, wenn es Ihnen nichts ausmacht, wenn die ComboBox nur dann angezeigt wird, wenn der Benutzer auf die zu bearbeitende Zelle klickt. Der Ansatz, den ich wollte, war eine generische Möglichkeit, ein Kombinationsfeld in einem DataGrid für alle Zeilen anzuzeigen und editierbar zu sein und eine angemessene Ereignispropagation zu ermöglichen.

    
Jamie Love 17.09.2009, 01:14
quelle
1

Der einfachste Weg, itemRenderers zu DataGrids hinzuzufügen, besteht darin, eine benutzerdefinierte MXML-Komponente zu erstellen. In Ihrem Fall erstellen Sie ein Canvas, HBox oder VBox als benutzerdefinierte Komponente und fügen Sie die Combobox als Kind hinzu. Legen Sie den dataProvider auf dem dataGrid selbst fest und weisen Sie den itemRenderer der Spalte zu und überschreiben Sie dann die set data-Funktion des itemRenderer alle Daten vom angegebenen Datenprovider für diese Instanz, wie unten dargestellt:

%Vor%

Diese Methode wird für jede Instanz des itemRenderer

aufgerufen     
Jeff Pinkston 14.09.2009 18:30
quelle
0

In meinem Fall habe ich ein Funke-Datagrid verwendet, wobei eine der Spalten einen ItemRenderer enthält, der eine DropDownListBox verwendet. Mein Problem war, dass sich die DropDownLists nicht mit dem neuen dataProvider aktualisieren, wenn sich meine Artikelliste ändert. Um dies zu lösen, musste ich den dataProvider für die DropDownListBox als Teil der Daten (des ItemRenderer) übergeben und dann den Setter der Daten überschreiben, um nur den DataProvider der DropDownlListBox zuzuweisen. Wahrscheinlich ein bisschen Overhead, aber wenn jemand eine bessere Lösung hat, lass es mich wissen:

%Vor%

    

Christo Smal 02.02.2014 13:16
quelle

Tags und Links