2009-11-12 6 views
0

Je veux avoir 2 fournisseurs de données pour 1 advancedDataGrid: 1 normal et un second pour combobox dans l'une des colonnes. Je veux avoir cette combobox pour avoir des données d'une colonne dans la base de données (je l'ai déjà dans arrayCollection). Je ne sais pas comment fournir des données pour comboBox de manière à ce qu'il ne soit pas obligé de lire ces données de la base de données à chaque fois pour chaque comboBox (en tant que composant personnalisé). Devrais-je transmettre arrayCollection au composant personnalisé? ou faites-le 'en ligne' dans mxml? Quelle est la meilleure façon?advancedDataGrid avec deux fournisseurs

Merci pour toute aide

+0

Est-ce que toutes les zones de liste déroulante (dans chaque ligne) ont le même fournisseur de données? – Amarghosh

+0

oui ___________ – fazo

Répondre

0

Le plus simple est de

  • créer une propriété statique sur votre itemRenderer et passer dans les données
  • ou, rechercher les données dans la itemRenderer via une variable globale
0

Pouvez-vous pas seulement définir la ArrayCollection comme propriété de l'objet qui est lié à chaque ligne?

Une ligne correspond à un objet avec une propriété contenant votre arrayCollection qui est liée à la zone de liste déroulante.

0

Je suppose que field_2 dans table1 contient une clé pour une ligne dans la table 2.

Configurez votre DataGrid pour utiliser table1 en tant que fournisseur. Assurez-vous que la deuxième colonne utilisez le moteur de rendu personnalisé avec un combobox

<mx:AdvancedDataGrid dataProvider="{table1}"> 
    <mx:groupedColumns> 
     <mx:AdvancedDataGridColumn headerText="Column 1" dataField="field_1" /> 
     <mx:AdvancedDataGridColumn headerText="Column 2" dataField="field_2" 
     itemRenderer="{CustomRenderer}"/> 
    </mx:groupedColumns> 
</mx:AdvancedDataGrid> 

Le moteur de rendu est juste une toile avec un combobox à l'intérieur. La liste déroulante utilise une copie des données table2 (il suffit de créer une collection de tableaux et de la remplir une fois avec les données de la base de données) en tant que fournisseur et utilise les données de table1 pour afficher l'élément sélectionné.

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" dataChange="dataChange()> 
    <mx:Script> 
     <![CDATA[ 
     private function dataChange():void 
     { 
      //Update combobox selected index 
      myCombo.selectedIndex(data); 
     } 
     ]]> 
    </mx:Script> 

    <mx:ComboBox id="myCombo" dataProvider="{table2_copy}"\> 
</mx:Canvas> 
Questions connexes