I've experimented some with this and found that editable="true" on a ComboBox renderer can cause some very unexpected behavior. I have had most success by ensuring that my renderers handle the dataprovider item updates themselves. ComboBox and item renderers are complex enough without adding the default DataGrid editing functionality into the mix.
You can leave editable="true" on the DG, but set it to false on any DataGridColumn with a complex renderer. Now, thinking about it some more, the issue might be solved by ensuring your renderer does NOT update the item itself. Might try that. Tracy ________________________________ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Alex Harui Sent: Saturday, November 24, 2007 3:22 AM To: [email protected] Subject: RE: [flexcoders] ComboBox and DataGrid - set data() call causes next ComboBox to collapse... Did you set editable=true on the DG? If so, it should update the data on itemEditEnd and not on change. ________________________________ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of cmarkiewicz Sent: Friday, November 23, 2007 1:43 PM To: [email protected] Subject: [flexcoders] ComboBox and DataGrid - set data() call causes next ComboBox to collapse... 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 <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.productC ode); trace("Match found!!!:"+j+"/"+pctmp); prodCodeChoices.selectedIndex = j; } } } } public function changeHandler(event:Event): void { trace("changeHandler...prodCodeChoices.selectedItem:"+prodCodeChoices.se lectedItem); 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 <http://www.nabble.com/ComboBox-and-DataGrid---set-data%28%29-call-cause s-next-ComboBox-to-collapse...-tf4841069.html#a13850434> Sent from the FlexCoders mailing list archive at Nabble.com.

