Изменение поставщика данных в сетке данных при изменении события другого массива данных - PullRequest
0 голосов
/ 15 октября 2011

У меня есть два датагрид: - Отдел - Члены Оба имеют отдельные столбцы. При выборе одного элемента из сетки данных «Разделения» должны отображаться элементы этого Дивизиона в сетке данных «Участники». Но следующий код имеет некоторую проблему, и члены определенного подразделения не отображаются при нажатии на соответствующий раздел.

Ниже приведены некоторые фрагменты соответствующего кода. Надеюсь, что кто-то может обнаружить ошибку в этом.

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>

Ответы [ 2 ]

2 голосов
/ 15 октября 2011

Позаботьтесь о своих условных заявлениях.

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

должно быть

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 голосов
/ 16 октября 2011

Добавьте эту строку в метод divDataGridChange (): memDataGrid.invalidateDisplayList();

Обновлен метод:

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();
        }

Также замените событие с " change " на " itemclick". Тегом сетки данных деления будет

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