时间:2011-08-09 08:55:35

标签: flex actionscript-3 flex4 air

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

上的值

我尝试做

<s:DropDownList  dataProvider="{DP_PAT_CIVIL}" selectedItem="@{objectUser.usrQualParent}"/>

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

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"}]

            );

objectUser.usrQualParent值为"Monsieur"

感谢您的帮助

1 个答案:

答案 0 :(得分:6)

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

因此,在您的情况下,"Monsieur"不是由Object而非String组成的数据提供者项目。但以下情况也不是这样:

<s:DropDownList  dataProvider="{DP_PAT_CIVIL}" selectedItem="{{label:"Monsieur" , data:"0"}}"/>

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

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

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

现在你的清单:

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