<s:DropDownList selectedItem

Fle*_*460 3 apache-flex air actionscript-3 flex4

我将使用我的数据库字段值来选择我的值 <s:DropDownList

我试着去做

<s:DropDownList  dataProvider="{DP_PAT_CIVIL}" selectedItem="@{objectUser.usrQualParent}"/>
Run Code Online (Sandbox Code Playgroud)

但是没有选择出现,提示中没有任何内容.

objectUser.usrQualParent表示数据提供者中存在的值DP_PAT_CIVIL.

例如,dataprovider是:

[Bindable]
        private var DP_PAT_CIVIL:ArrayCollection = new ArrayCollection (
            [{label:"Monsieur" , data:"0"},
            {label:"Madame", data:"1"},
            {label:"Mademoiselle", data:"2"},
            {label:"Le Jeune", data:"3"}]

            );
Run Code Online (Sandbox Code Playgroud)

objectUser.usrQualParent"Monsieur".

谢谢你的帮助

Con*_*ner 6

所选项目应指向数据提供者的确切项目.对于数据提供者可以包含的简单类型(例如String,Booleanint),它可以等于该值.对于复杂对象,它应该是完全相同的值(指向同一内存单元的指针).

因此,在您的情况下,"Monsieur"不是由Objects而不是Strings 组成的数据提供者项.但以下情况也不是这样的:

<s:DropDownList  dataProvider="{DP_PAT_CIVIL}" selectedItem="{{label:"Monsieur" , data:"0"}}"/>
Run Code Online (Sandbox Code Playgroud)

因为它是新创建的但不是同一个对象.

我建议您使用字符串作为键创建一些函数,以便从现有数据提供程序中搜索完全相同的值:

private function getSelectedItem(dp:ArrayCollection, key:String):Object
{
    if (dp && dp.length > 0)
    {
        for each (var item:Object in dp)
        {
            if (item.label == key)
                return item;
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

现在你的清单:

<s:DropDownList  dataProvider="{DP_PAT_CIVIL}" 
    selectedItem="{getSelectedItem(DP_PAT_CIVIL, objectUser.usrQualParent)}" 
    change="objectUser.usrQualParent = event.currentTarget.selectedItem.label"/>
Run Code Online (Sandbox Code Playgroud)