The following code is the cell renderer for for a ComboBox in a DataGridColumn. It works fine when setting the comboBox’s data in the constructor. There’s a problem using the red code below. If the DataGrid row is not already selected the dropdown list appears but is empty.
Any ideas? If the row is not already selected, the selectedItem is being set causing a STATE invalidation after the list a created. I’m not sure how to prevent this.
package
{
import fl.controls.ComboBox;
import fl.controls.listClasses.ICellRenderer;
import fl.controls.listClasses.ListData;
import fl.core.InvalidationType;
import fl.data.DataProvider;
import flash.events.Event;
public class ComboBoxCellRenderer extends ComboBox implements ICellRenderer
{
protected var _data:Object;
protected var _listData:ListData;
protected var _selected:Boolean;
public function ComboBoxCellRenderer() : void {
super();
addEventListener( Event.CHANGE, handleEvent );
[COLOR=darkgreen] //addItem( {label:"A"} );
//addItem( {label:"B"} );[/COLOR]
}
private function handleEvent( event:Event ) : void {
data.selected = selectedIndex;
listData.owner.dispatchEvent( new Event( Event.CHANGE ) );
}
public function get data() : Object {
return _data;
}
public function set data(value:Object) : void {
[COLOR=red] removeAll();
for each ( var str:String in value.arrayOfValues ) {
addItem( {label:str} );
}[/COLOR]
selectedIndex = value.selected;
_data = value;
}
public function get listData() : ListData {
return _listData;
}
public function set listData(value:ListData) : void {
_listData = value;
invalidate(InvalidationType.DATA);
invalidate(InvalidationType.STATE);
}
public function get selected() : Boolean {
return _selected;
}
public function set selected(value:Boolean) : void {
_selected = value;
invalidate(InvalidationType.STATE);
}
public function setMouseState(state:String) : void {
}
}
}