Связываемое поле со списком - выбранный элемент / индекс

Я пытаюсь связать элемент datagrid с combox, так что, когда пользователь выбирает элемент в datagrid, форма отображает выбранные данные для редактирования, однако один из моих элементов - это combobox, использующий dataprovider.

Я хотел бы, чтобы элемент, выбранный в datagrid, соответствовал выбранному элементу в combobox, эта часть прекрасно, но если мой элемент datagrid имеет значение null, то я не могу заставить combox установить выделенный индекс на -1?

(то же самое происходит, если вы используете мастер CRUD в Flex Builder 3 для ColdFusion)

Я использую следующий код для своего пользовательского combobox:

<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, вызывающая combox, такова:

<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>

Любая помощь приветствуется.

Спасибо.

flex,flex3,coldfusion,

0

Ответов: 2


0

В setItem setter тестирование this.valueField для nullity бесполезно, потому что вы установили его в «Code» в mxml. Вместо этого вы должны проверить, имеет ли значение val значение null.

Так что просто замените

if( this.valueField != null) 

с

if( val != null)

и тогда это должно сработать.


0

попробуйте установить приглашение для combobox следующим образом:

<components:BindableComboBoxa id="gender"
              dataProvider="{genderData}"
              valueField="Code"
              labelField="Description"
              prompt="Please Select"
              />
флекс, Flex3, ColdFusion,