Цитата:
Сообщение от sabbats
Тебе могут помочь те, кто решал данную проблему. Посмотри
|
не, это я уже читал - не мой случай. помогло вот это
тынц
исправленный код компонента (если, конечно, кому интересно :-) )

Код:
package datech.controls
{
import mx.collections.ArrayCollection;
import mx.controls.ComboBox;
import mx.controls.dataGridClasses.DataGridListData;
import mx.events.FlexEvent;
import mx.events.ListEvent;
public class DropInGridComboBox extends ComboBox{
public function DropInGridComboBox(){
super();
this.addEventListener(ListEvent.CHANGE, onSelectionChange);
}
/////// PRIVATE FIELDS ///////
[Bindable]
private var _values:ArrayCollection;
private var _showfield:String;
private var _keyfield:String;
//////////////////////////////
/////// PROPERTIES FOR ClassFactory CLASS ///////
public function set values(value:ArrayCollection):void{
_values = value;
invalidateNestedComboBox();
}
public function set showField(value:String):void{
super.labelField = value;
_showfield = value;
invalidateNestedComboBox();
}
public function set keyField(value:String):void{
_keyfield = value;
invalidateDisplayList();
}
/////////////////////////////////////////////////
/////// ComboBox UTILITIES ///////
protected function invalidateNestedComboBox():void{
if(_values == null || _showfield == null || _showfield == "") return;
this.dataProvider = _values;
this.labelField = _showfield;
invalidateDisplayList();
}
protected function setCurrentItem(cur:Object):void{
for(var i:int = 0; i<_values.length; i++)
if(_values[i][_keyfield] == cur[_keyfield])
{
super.data = cur;
this.selectedIndex = i;
break;
}
}
//////////////////////////////////
/////// CombobBox Data stuff overriding ///////
override public function set data(value:Object):void{
setCurrentItem(value);
invalidateProperties();
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}
private function onSelectionChange(evt:ListEvent):void{
if(this.listData is DataGridListData)
{
var ownerList:DataGridListData = DataGridListData(this.listData);
this.data[ownerList.dataField] = this.selectedItem[this._keyfield];
}
}
//////////////////////////////////////////////
/////// OTHER UTILITIES ///////
static public function compareFunctionAsString(fieldName:String, obj1:Object, obj2:Object):int
{
var str1:String = obj1[fieldName].toString();
var str2:String = obj2[fieldName].toString();
var ret:int;
if(str1 < str2)
ret = -1;
else if (str1 > str2)
ret = 1;
else
ret = 0;
return ret;
}
///////////////////////////////
}
}