Я пытаюсь привязать элемент сетки данных к комбинированному списку, чтобы при выборе пользователем элемента в сетке данных форма отображала выбранные данные для редактирования, однако один из моих элементов - это комбинированный список с использованием провайдера данных.
Я бы хотел, чтобы элемент, выбранный в таблице данных, соответствовал выбранному элементу в выпадающем списке, но эта часть подойдет, однако, если мой элемент таблицы данных пуст, то я не могу получить в поле со списком для выбранного индекса значение -1?
(то же самое происходит, если вы используете мастер CRUD в Flex Builder 3 для ColdFusion)
Я использую следующий код для своего пользовательского комбинированного списка:
<mx:ComboBox
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns="*"
creationComplete="componentInit()"
>
<mx:Script>
<![CDATA[
import mx.utils.ObjectUtil;
import mx.controls.Alert;
[Bindable]
public var valueField:String = "";
[Bindable]
public var labelFields:Array = [];
public function componentInit():void {
this.labelFunction = renderLabelFunction;
}
public function renderLabelFunction(item:Object):String {
var result:String = "";
if (labelFields.length == 0) {
if (labelField != null) {
return item[labelField];
} else {
return item.toString();
}
}
else {
for(var i:int=0; i < labelFields.length; i++) {
if (i > 0) {
result += " ";
}
result += item[labelFields[i]];
}
}
return result;
}
override public function set selectedItem(val:Object):void {
//Alert.show(valueField +":" +ObjectUtil.toString(val));
if( this.valueField != null) {
for(var i:int=0; i < this.dataProvider.source.length; i++) {
var item:Object = this.dataProvider.source[i];
if ( item[valueField]== val ) {
// if it matches, make it selected.
this.selectedIndex = i;
break;
}
}
} else {
this.selectedIndex = -1;
}
}
public function get selectedItemValue():Object {
if( this.valueField != null && selectedItem != null) {
return selectedItem[valueField];
} else {
return text;
}
}
]]>
</mx:Script>
</mx:ComboBox>
и часть MXML, вызывающая комбокс, выглядит так: -
<mx:DataGrid id="clientDatagrid" selectedIndex="1" visible="true"/>
<mx:Form height="305">
<mx:FormItem direction="horizontal" label="Surname" required="true" visible="true" width="100%" horizontalAlign="left">
<mx:TextInput enabled="true" id="Surname" text="{clientDatagrid.selectedItem.Surname}" width="100%" visible="true"/>
</mx:FormItem>
<mx:FormItem direction="horizontal" label="Forename" required="true" visible="true" width="100%" horizontalAlign="left">
<mx:TextInput enabled="true" id="Forename" text="{clientDatagrid.selectedItem.Forename}" width="100%" visible="true"/>
</mx:FormItem>
<components:BindableComboBoxa id="gender"
dataProvider="{genderData}"
valueField="Code"
labelField="Description"
/>
</mx:form>
Любая помощь будет высоко ценится.
Спасибо.