I saw something else similar in flexcoders, but the information 
didn't seem to apply to this case.  I can create a popup window from 
a button's click handler, but THE SAME CODE used when editing a 
DataGrid cell FAILS!

Is it a bug or a mis-use of PopupManager??  Thanks for any help!

Top part of Error stack:
RangeError: Error #2006: The supplied index is out of bounds.
        at flash.display::DisplayObjectContainer/addChildAt()
        at 
mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal:
:rawChildren_addChildAt()
        at mx.managers::SystemManager/addChild()
        at mx.managers::PopUpManagerImpl/addPopUp()
        at mx.managers::PopUpManager$/addPopUp()
        at TestPopup/::onCellEdit()
        at TestPopup/__pointGrid_itemEditEnd()
        at 
flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEv
entFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at mx.core::UIComponent/dispatchEvent()
        at mx.controls::DataGrid/::endEdit()
        at mx.controls::DataGrid/::deactivateHandler()
        at 
flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEv
entFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at mx.core::UIComponent/dispatchEvent()
        at mx.controls::DataGrid/::endEdit()

This is the smallest example I can create:

[File1: TestPopup.mxml]
==================================================================
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
 layout="absolute" applicationComplete="onAppComplete()">
<mx:Script>
  <![CDATA[
        import mx.managers.PopUpManager;
        import mx.collections.ArrayCollection;
        import mx.events.DataGridEvent;
        import mx.events.DataGridEventReason;

        private var popWin:MyPopupWindow = null;

        private var curData:ArrayCollection;    // items for datagrid

        private var items:ArrayCollection;      // items for pop up

        private function onAppComplete():void {
         curData = new ArrayCollection();
         curData.addItem( { ident:"ORD", cityname:"Chicago, IL" } );
         curData.addItem( { ident:"ATL", cityname:"Atlanta, GA" } );
         curData.addItem( { ident:"DEN", cityname:"Denver, CO" } );
         curData.addItem( { ident:"", cityname:"" } );  // one blank

         pointGrid.rowCount = 5;
         pointGrid.dataProvider = curData;

         items = new ArrayCollection();
         items.addItem( {ident:"JFK", cityname:"New York, NY"} );
         items.addItem( {ident:"LAX", cityname:"Los Angeles, CA"} );
         items.addItem( {ident:"SEA", cityname:"Seattle, WA"} );
        }

        private function onClick():void {
         if(popWin == null) {
                popWin = new MyPopupWindow();
                popWin.itemChoices = items;
         }
         PopUpManager.addPopUp(popWin, this, true);
         PopUpManager.centerPopUp(popWin);
        }

        private function onCellEdit(event:DataGridEvent):void {
         if(event.reason == DataGridEventReason.CANCELLED)
                return;
         if(popWin == null) {
                popWin = new MyPopupWindow();
                popWin.itemChoices = items;
         }
         PopUpManager.addPopUp(popWin, this, true);
         PopUpManager.centerPopUp(popWin);
        }
  ]]>
</mx:Script>

<mx:VBox>
 <mx:Label text="Clicking the button creates popup OK:" />
 <mx:Button id="theButton" label="Click Me" click="onClick()"/>
 <mx:Label text="However, editing a cell FIRST fails:" />
 <mx:DataGrid id="pointGrid" itemEditEnd="onCellEdit(event)"
        editable="true">
  <mx:columns>
   <mx:DataGridColumn id="identCol" width="50" dataField="ident" 
headerText="Ident"/>
   <mx:DataGridColumn id="citynameCol" width="90" 
dataField="cityname" headerText="City/Name" paddingLeft="1" 
paddingRight="1"/>
  </mx:columns>
 </mx:DataGrid>
</mx:VBox>
</mx:Application>

[File2: MyPopupWindow.mxml]
==================================================================
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml"; layout="absolute"
 width="400" height="300" title="The Popup Window">

<mx:DataGrid id="selItemList" dataProvider="{itemChoices}"
 width="100%" height="100%">
 <mx:columns>
  <mx:DataGridColumn id="identCol" dataField="ident"
   headerText="Ident"/>
  <mx:DataGridColumn id="typeCol" dataField="cityname"
   headerText="City"/>
 </mx:columns>
</mx:DataGrid>
<mx:ControlBar width="100%">
 <mx:Spacer width="100%"/>
 <mx:Button label="Cancel" click="onCancel()"/>
</mx:ControlBar>

<mx:Script>
  <![CDATA[
        import mx.managers.PopUpManager;
        import mx.collections.ArrayCollection;

        [Bindable] public var itemChoices:ArrayCollection =
                       new ArrayCollection();

        private function onCancel():void {
                PopUpManager.removePopUp(this);
        }
  ]]>
</mx:Script>
</mx:Panel>


Reply via email to