9
votes

Flex DataGrid avec ComboBox ItemRenderer

Je vais épargner d'essayer de comprendre le moyen "correct" d'intégrer une combinaison de ComboBox à l'intérieur d'un flex (3.4) DataGrid. Par les droits (par exemple, selon cette page http://blog.flexmonkeokatches.com/2008/02/18/simple-datagrid-combobox-as-item-editor-example/ ) Il devrait être facile, mais je ne peux pas pour la vie de moi Faites ce travail.

La différence que j'ai à l'exemple lié ci-dessus est que ma valeur d'affichage (ce que l'utilisateur voit) est différent de la valeur ID que je souhaite sélectionner activée et stockez dans mon fournisseur de données. < p> alors ce que j'ai est: xxx

transactiontypesdata a des champs "Data" et "étiquettes" (selon ce que le Combobox - Pourquoi sur Terre il ne fournit pas à la fois un labelfield et IDFIELD, je ne saurai jamais).

Quoi qu'il en soit, le code MXML ci-dessus ne fonctionne pas de deux manières:

  1. La liste déroulante ne s'affiche pas avec un élément sélectionné.
  2. Après avoir sélectionné un élément, il ne stocke pas cet élément sélectionné dans le magasin de données.

    Donc, quelqu'un a-t-il une situation similaire à travailler?


0 commentaires

3 Réponses :


2
votes

Le moyen le plus simple d'ajouter de l'élémentRenderers à DataGrids est de créer un composant MXML personnalisé. Dans votre cas, créez une toile, HBOX ou une Vbox comme composant personnalisé et ajoutez le ComboBox en tant qu'enfait.SeLe DataProvider sur le Datagramrid lui-même et attribuez l'itemRenderer à la colonne, puis remplacez la fonction de données définie de l'élémentRenderer pour accéder à Toutes les données du fournisseur de données donné pour cette instance, comme indiqué ci-dessous: xxx

Cette méthode sera appelée à chaque instance de l'itemRenderer


1 commentaires

J'espérais éviter une telle approche sinueuse et je suppose que j'aurai besoin de remplacer aussi.



5
votes

Bien que la réponse de Jeff est une réponse partielle pour une approche pour cela (voir http: // flex. gunua.com/?p=119 pour un exemple complet de ceci étant utilisé à bon effet), ce n'est pas aussi général que je le voulais.

Heureusement, j'ai enfin trouvé une bonne aide sur Experts Exchange (les réponses de Hobbit72) décrit comment créer un composant personnalisé qui fonctionne dans une grille en tant que itemRenderer. J'ai étendu ce code pour également prendre en charge l'utilisation de la liste déroulante en tant qu'imentiditor. Le composant complet est le suivant: p> xxx pré>

Utilisation de ce composant est simple. En tant que itemRenderer: P>

<mx:DataGridColumn labelFunction="lookupChildName" headerText="Child" dataField="PersonID" editable="true" editorDataField="selectedItemKey">
    <mx:itemEditor>
        <mx:Component>
            <fx:GridComboBox dataProvider="{parentDocument.childrenData}" labelField="Name" lookupField="PersonID" change="dispatchEvent(new mx.events.DataGridEvent(mx.events.DataGridEvent.ITEM_FOCUS_OUT, true, true))"/>
        </mx:Component>
     </mx:itemEditor>      
</mx:DataGridColumn>


2 commentaires

J'aimerais vraiment voir le code complet sans avoir à obtenir un essai gratuit à EE (l'anti-Ainsi!), S'il vous plaît!


J'aimerais voir une version d'étincelle de cela.



1
votes

Dans mon cas, j'ai utilisé une étincelle Datagrid dans laquelle l'une des colonnes a un itemRenderer qui utilise une liste déroulante. Mon problème était que lorsque ma liste d'articles change, les listes déroulantes ne sont pas mises à jour avec le nouveau DataProvider. Pour résoudre ceci, je devais transmettre le DataProvider pour la liste déroulanteListbox dans le cadre des données (de l'itemRenderer), puis en remplacant la sécheuse des données pour simplement affecter le DataProvider de Dropdowlistbox. Probablement un peu de frais généraux, mais si quelqu'un a une meilleure solution, laissez-moi savoir: xxx


0 commentaires