Hello.  I have a DataGrid with a column of ComboBoxes.  The behavior I'm
seeing is this:
1) I click on a ComboBox - it expands
2) I choose a value - it collapses
3) I click on a ComboBox in a different column
4) It expands - then immediately collapses

I have determined why it is happening, but I'm not sure how to make it stop.

I have a separate mxml file where I define the ComboBox and I override the
set data() method.  The set data() method sets the value in the ComboBox in
each row.  The issues is that after I change a ComboBox in one row, set
data() is called on all rows - so as soon as I click on the second ComboBox,
set data() is called (because I clicked away from the first ComboBox), the
value is set in the second ComboBox - and it collapses.  

So, if I change the value in one ComboBox, click to some other cell, then
click on the second ComboBox, it works fine (because set data() is called
when i click to the other cell).  So my questions is, how do I make this
work?  Can I force the call to set data() as soon as the first ComboBox
collapses (my putting focus on another component temporarily?)?  Or can I
make it bypass the set data() call from ComboBoxes which weren't touched?  

Any help is greatly appreciated.

Code is below, if it helps...

Thanks
Chris

<?xml version="1.0" encoding="utf-8"?>
<!-- mxmlcomponents/TypeComboBoxRenderer.mxml -->
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml";  
                        xmlns:lib="t3quote.*"
                        horizontalScrollPolicy="off" verticalScrollPolicy="off" 
                        >
   <mx:Script>
        <![CDATA[
                import mx.messaging.channels.StreamingAMFChannel;
            // Define a property for returning the new value to the cell.
            [Bindable]
                        public var valueSelected:String;
                        

        
             override public function set data(value:Object):void
             {
                if(value != null)
                {
                        super.data = value;
                        trace("set data...data.productCode:"+data.productCode);
        
                   //show the comboBox
                   if(value.nonPartFlag)
                   {
                       prodCodeChoices.visible=true;
                       prodCodeLabel.visible=false;
                   }
                   //hide the comboBox and show the label
                   else
                   {
                       prodCodeChoices.visible=false;
                       prodCodeLabel.visible=true;
                   }
                   
                   var pcArr:Array = data.productCodeArray;
                   for (var j:int = 0; j < pcArr.length; j++)
                   {
                                var pctmp:String = pcArr[j];
                                if (pctmp == data.productCode)
                                {
                                
trace("PrevIndex/NewIndex:"+prodCodeChoices.selectedIndex+"/"+j);
                                
trace("PrevItem/NewItem:"+prodCodeChoices.selectedItem+"/"+data.productCode);
                                        trace("Match found!!!:"+j+"/"+pctmp);
                                        prodCodeChoices.selectedIndex = j;
                                }
                   }
                   

                }   
             }
                        
                                
                        public function changeHandler(event:Event): void
                    {
                     
trace("changeHandler...prodCodeChoices.selectedItem:"+prodCodeChoices.selectedItem);
                        valueSelected  = String(prodCodeChoices.selectedItem);
                    }            
        ]]>
    </mx:Script>


        <mx:ComboBox id="prodCodeChoices" dataProvider="{data.productCodeArray}"
width="100%"    
                change="changeHandler(event)"
                creationComplete="prodCodeChoices.selectedItem=data.productCode"
                />
<!--
        <lib:ComboBox id="prodCodeChoices" 
dataProvider="{data.productCodeArray}"
width="100%"    
                value="{data.productCode}"  
                />
-->             
        <mx:Label id="prodCodeLabel" text="{data.productCode}" />           


</mx:Canvas>


-- 
View this message in context: 
http://www.nabble.com/ComboBox-and-DataGrid---set-data%28%29-call-causes-next-ComboBox-to-collapse...-tf4841069.html#a13850434
Sent from the FlexCoders mailing list archive at Nabble.com.

Reply via email to