2011-08-09 7 views
3

は私が<S:DropDownListコントロールのSelectedItem

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

をしようとする。しかし何も選択は、何もプロンプトに表示されていない表示されない私の<s:DropDownList

上の値を選択するために、私のデータベースフィールドの値を使用するように思います。

objectUser.usrQualParentは、値がデータ提供者DP_PAT_CIVILに存在することを表します。

はexempleのために、データプロバイダは、次のとおりです。

[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"です。

ありがとうございました

+0

何がドロップダウンリストに表示されますまたはプロンプトで? – Benny

答えて

6

選択した項目は、データプロバイダの正確な項目を示す必要があります。データプロバイダが構成できる単純なタイプの場合(StringBooleanまたはint)、その値と同じにすることができます。複雑なオブジェクトの場合、同じ値(同じメモリのユニットへのポインタ)でなければなりません。

したがって、"Monsieur"は、で構成され、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"/> 
+0

ありがとうございます、あなたは非常にうまく動作します – Flex60460

関連する問題