可绑定组合框 - 选择项目/索引

时间:2009-06-15 18:10:02

标签: flex flex3 coldfusion

我正在尝试将数据网格项绑定到一个combox,这样当用户选择数据网格中的项目时,表单会显示所选数据以进行编辑,但是我的一个项目是使用数据提供者的组合框。

我希望在数据网格中选择的项目与组合框中的选定项目匹配,这部分很好,但是如果我的datagrid项目为null,那么我无法让combox将所选索引设置为-1?

(如果在Flex构建器3中使用CRUD向导进行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>

和调用combox的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>

非常感谢任何帮助。

谢谢。

2 个答案:

答案 0 :(得分:0)

在selectedItem setter中,测试this.valueField的null是没用的,因为你在mxml中将它设置为“Code”。相反,你应该测试val是否为null。

所以只需替换

if( this.valueField != null) 

if( val != null)

然后它应该工作。

答案 1 :(得分:0)

尝试像这样设置组合框的提示:

<components:BindableComboBoxa id="gender"
              dataProvider="{genderData}"
              valueField="Code"
              labelField="Description"
              prompt="Please Select"
              />