Quantcast
Channel: Adobe Community : Popular Discussions - Using Flash Builder
Viewing all articles
Browse latest Browse all 70427

DropDownList ItemRenderer within Flex Datagrid Not Refreshing

$
0
0

I have a datagrid which contains a Spark dropdownlist that needs to  obtain dynamic data.

 

The datagrid uses a separate dataProvider.

 

 

When I use a static ArrayCollection within my ItemRenderer, it works (please see listing 1).

 

 

However, when I use Swiz to mediate a 'list complete' event to load  the ArrayCollection, the dropdownlist does not show the new data (please  see listing 2).

 

 

Using the debugger, I inspected the dropdownlist ItemRenderer and  have confirmed the new data is being loaded into the ArrayCollection.

 

The new data is not shown in the UI control. I have tried  invalidateProperties() + validateNow() and dispatching events on both  the control and the renderer (this), but nothing seems to make the new  data appear in the control on the datagrid.

 

 

Please help !!!

 

Listing 1: Datagrid and static ArrayCollection (this works)

 

<mx:DataGrid x="10" y="25" width="98%" id="dgInventory" paddingLeft="25" paddingRight="25" paddingTop="25" paddingBottom="25"                     editable="true"                     itemClick="dgInventory_itemClickHandler(event)" dataProvider="{acInventory}"                     creationComplete="dgInventory_creationCompleteHandler(event)"                     height="580">            <mx:columns>                <mx:DataGridColumn headerText="Item" dataField="itemName" itemRenderer="components.ItemRendererItem"                                   rendererIsEditor="true" editorDataField="selection" editable="true"/>                <mx:DataGridColumn headerText="Quantity Required" dataField="quantityReq" itemRenderer="components.ItemRendererQuantityRequired"                                   rendererIsEditor="true" editorDataField="selection" editable="true"/>            </mx:columns></mx:DataGrid><fx:Script>    <![CDATA[              import mx.collections.ArrayCollection;        import spark.events.IndexChangeEvent;        public var selection:int;        [Bindable]        protected var acItem:ArrayCollection = new ArrayCollection(            [   { itemName: "Item1"},                { itemName: "Item2"},                { itemName: "Item3"},            ]);    //        protected function dropdownlist1_changeHandler(e:IndexChangeEvent):void        {            selection = e.newIndex;        }    ]]></fx:Script><s:DropDownList id="ddlItem" prompt="Select Item" dataProvider="{acItem}" labelField="itemName"                selectedIndex="{int(dataGridListData.label)}"                change="dropdownlist1_changeHandler(event)"                width="80%" top="5" bottom="5" left="5" right="5"/>

 

Listing 2: Dynamic ArrayCollection (does not work):

 

<?xml version="1.0" encoding="utf-8"?>
<s:MXDataGridItemRendererxmlns:fx="http://ns.adobe.com/mxml/2009"
                         
xmlns:s="library://ns.adobe.com/flex/spark"
                         
xmlns:mx="library://ns.adobe.com/flex/mx"
                         
focusEnabled="true">

   
<fx:Script>
        <![CDATA[      
            import event.ItemEvent;

            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;

            import spark.events.IndexChangeEvent;

            public var selection:int;
        //
            [Bindable]
            protected var acItem:ArrayCollection = new ArrayCollection();
        //
            protected function dropdownlist1_changeHandler(e:IndexChangeEvent):void
            {
                selection = e.newIndex;
            }
        //
            protected function ddlItem_creationCompleteHandler(event:FlexEvent):void
            {
                var eve : ItemEvent = new ItemEvent( ItemEvent.LIST_ITEM_REQUESTED );
                dispatchEvent( eve );
            }
        //
            [Mediate( event="ItemEvent.LIST_ITEM_COMPLETE", properties="acItem" )]
            public function refreshness( _acItem : ArrayCollection ):void
            {
                acItem.removeAll();

                var len:int = _acItem.length;

                if (len > 0)
                {
                    for (var i:int=0; i < len; i++)
                    {
                        var newItem:Object = new Object;
                        newItem["itemName"] = _acItem[i].itemName;
                        acItem.addItem(newItem);
                    }
                }
                this.invalidateProperties();
                this.validateNow();
                //dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
            }

        ]]>
   
</fx:Script>

   
<s:DropDownListid="ddlItem"prompt="Select Item"dataProvider="{acItem}"labelField="itemName"
                   
selectedIndex="{int(dataGridListData.label)}"
                   
creationComplete="ddlItem_creationCompleteHandler(event)"
                   
change="dropdownlist1_changeHandler(event)"
                   
width="80%"top="5"bottom="5"left="5"right="5"/>
</s:MXDataGridItemRenderer>

Viewing all articles
Browse latest Browse all 70427

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>