AdvancedDataGrid добавить столбец от Dataprovider

У меня проблема с AdvancedDataGrid в Flex. У меня есть AdvancedDataGrid с Bindable ArrayCollection в качестве DataProvider. Когда я устанавливаю ArrayCollection (нажав кнопку 1), AdvancedDataGrid будет представлять 4 столбца.

После этого я нажимаю кнопку 2. В этом случае AdvancedDataGrid по-прежнему показывает 4 столбца вместо ожидаемых 3 столбцов.

Сценарий 2

При первом нажатии Button2 -> AdvancedDataGrid отображается 3 столбца. При нажатии Button1 -> AdvancedDataGrid по-прежнему отображается 3 столбца вместо ожидаемых 4 столбцов.

Как я могу сказать AdvancedDataGrid, что нужно настроить количество столбцов?

Фрагмент:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;
            [Bindable]
            private var dataProv:ArrayCollection;


            protected function button1_clickHandler(event:MouseEvent):void {
                dataProv = new ArrayCollection([
                    {country:"USA", year2004:3.5, year2005:4.2, year2006:3.7},
                    {country:"UK", year2004:1.7, year2005:3.1, year2006:3.6},
                    {country:"Canada", year2004:2.8, year2005:2.9, year2006:3.4},
                    {country:"Japan", year2004:2.6, year2005:2.3, year2006:2.8},
                    {country:"France", year2004:1.4, year2005:2.1, year2006:2.6},
                    {country:"Brazil", year2004:2.6, year2005:4.9, year2006:4.4},
                    {country:"Russia", year2004:6.4, year2005:7.2, year2006:6.7},
                    {country:"India", year2004:8.0, year2005:7.1, year2006:6.6},
                    {country:"China", year2004:9.9, year2005:10.1, year2006:10.6}
                ]); 
                adg.validateNow();
                adg.dataProvider.refresh();
            }


            protected function button2_clickHandler(event:MouseEvent):void{
                dataProv = new ArrayCollection([
                    {country:"USA", year2004:3.5, year2005:4.2},
                    {country:"UK", year2004:1.7, year2005:3.1},
                    {country:"Canada", year2004:2.8, year2005:2.9},
                    {country:"Japan", year2004:2.6, year2005:2.3},
                    {country:"France", year2004:1.4, year2005:2.1},
                    {country:"Brazil", year2004:2.6, year2005:4.9},
                    {country:"Russia", year2004:6.4, year2005:7.2},
                    {country:"India", year2004:8.0, year2005:7.1},
                    {country:"China", year2004:9.9, year2005:10.1}
                ]); 
                adg.validateNow();
                adg.dataProvider.refresh();
            }

        ]]>
    </mx:Script>

    <mx:HBox width="100%" height="100%">
        <mx:AdvancedDataGrid
            id="adg"
            width="100%"
            height="100%"
            dataProvider="{dataProv}"/>
        <mx:Button label="change" click="button1_clickHandler(event)"/>
        <mx:Button label="changeBack" click="button2_clickHandler(event)"/>
    </mx:HBox>

</mx:Application>

person Dominic Weiser    schedule 10.07.2012    source источник
comment
Вероятно, вам придется вручную удалить элементы из свойства массива столбцов AdvancedDataGrid.   -  person JeffryHouser    schedule 10.07.2012


Ответы (1)


Вам необходимо расширить класс AdvancedDataGrid и переопределить collectionChangeHandler. Для того чтобы код динамического столбца выполнялся более одного раза, необходимо установить для защищенной переменной generateColumns значение true.

override protected function collectionChangeHandler(event:Event):void
{
    generatedColumns = true;
    super.collectionChangeHandler(event);
}
person slukse    schedule 10.07.2012