2011-10-15 2 views
0

J'ai deux datagrids: - Division - Membres Les deux ont des colonnes simples. La sélection d'un élément de la grille de données Divsions doit afficher les membres de cette division dans la grille de données Membres. Mais le code suivant a un problème et les Membres d'une division particulière n'apparaissent pas lorsque l'on clique sur Divsion.Modification du fournisseur de données d'un événement DataGrid sur un événement de modification d'un autre DataGrid

Voici quelques extraits du code associé. J'espère que quelqu'un peut repérer une erreur.

private var divs_array:Array = ['Division A','Division B']; 
[Bindable] private var divisions:ArrayCollection = new ArrayCollection(divs_array); 

private var memA_array:Array = ['Jo Koy','Stephan Lynch', 'Charlie Murphy', 'Michael']; 
[Bindable] private var mems_of_A :ArrayCollection = new ArrayCollection(memA_array); 

private var memB:Array = ['Ali','Ikram']; 
[Bindable] private var mems_of_B:ArrayCollection = new ArrayCollection(memB_array);   

private function divDataGridChange():void{ 
    if (divDataGrid.selectedIndex==0) 
    memDataGrid.dataProvider=mems_of_A; 
    else (divDataGrid.selectedIndex==1) 
    memDataGrid.dataProvider=mems_of_B; 
} 

private function getCombinedUserNameLabel(item:Object, col:DataGridColumn):String 
{ 
    return item.firstName + " " + item.lastName; 
} 

<mx:DataGrid id="divDataGrid" dataProvider="{divisions}" width="150" height="265" change="{divDataGridChange()}" selectedIndex="0"> 
    <mx:columns> 
    <mx:DataGridColumn width="150" headerText="Select a Division" /> 
    </mx:columns> 
</mx:DataGrid> 
<mx:DataGrid id="memDataGrid" dataProvider="{mems_of_A}" change="{monDataGridChange()}" selectedIndex="0"> 
    <mx:columns> 
    <mx:DataGridColumn width="150" headerText="Select a User" labelFunction="{getCombinedUserNameLabel}" /> 
    </mx:columns> 
</mx:DataGrid> 

Répondre

2

Prenez soin de vos déclarations conditionnelles.

private function divDataGridChange():void{ 
    if (divDataGrid.selectedIndex==0) 
    memDataGrid.dataProvider=mems_of_A; 
    else (divDataGrid.selectedIndex==1) 
    memDataGrid.dataProvider=mems_of_B; 
} 

devrait être

private function divDataGridChange():void{ 
    if (divDataGrid.selectedIndex==0) 
    memDataGrid.dataProvider=mems_of_A; 
    else if (divDataGrid.selectedIndex==1) 
    memDataGrid.dataProvider=mems_of_B; 
} 

http://livedocs.adobe.com/flex/3/html/help.html?content=03_Language_and_Syntax_15.html

+0

Oh. Je vous remercie. Mais le problème persiste, c'est-à-dire que les éléments DataGrid des membres ne changent pas lorsque vous cliquez sur les éléments DataGrid des divisions. : - / – baltoro

0

Ajouter cette ligne à la méthode divDataGridChange(): memDataGrid.invalidateDisplayList();

méthode Mise à jour:

private function divDataGridChange():void{ 
      if (divDataGrid.selectedIndex==0) 
       memDataGrid.dataProvider=mems_of_A; 
      else if (divDataGrid.selectedIndex==1) 
       memDataGrid.dataProvider=mems_of_B; 

      memDataGrid.invalidateDisplayList(); 
     } 

il faut aussi replacer l'événement de "changement " à "itemClick" .La division balise DataGrid sera

<mx:DataGrid id="divDataGrid" dataProvider="{divisions}" width="150" height="265" itemClick="{divDataGridChange()}" selectedIndex="0" > 
Questions connexes