2011-07-19 7 views
0

私は2つのテーブル持って更新されません。のFlexデータグリッドが正しく

SELECT pName, departments.deptName FROM people INNER JOIN people.deptID = departments.deptID; 
:人{PID、はpName、DEPTID}および部門{DEPTID、DEPTNAME} を、このようなSQL文は私に人の名前と部署名を取得します

上記の動作は問題ありません。私は、deptNamesで設定されたFlexのDropDownListを持っています。私は、送信ボタンをクリックすると、私は問題なく選択した部門のIDを取得することができる午前:

protected function button_clickHandler(event:MouseEvent):void 
    { 
    person.pName=pNameTextInput.text; 
    person.deptID=pDepartmentDropDownList.selectedItem.deptID; //ID of selected department obtained correctly. 
    if (person.pID == 0) 
    { 
    createPersonResult.token=personService.createPerson(person); 
    } 
    else 
    { 
    updatePersonResult.token=personService.updatePerson(person); 
    } 
    } 

私は人が追加されたときにデータグリッドを更新しようとcreatePersonresultハンドラを持っています。データグリッドは追加された新しい人物で更新されますが、部門の列では、ドロップダウンリストから選択された部門のIDが取得されます。私は、deptNameを表示するために、リフレッシュされたDataGridを得るためにフラッシュアプ​​リケーションをリロードする必要があります。

このcreatePerson結果ハンドラに何かがありません。 Googleは大した助けをしなかった。上記のコメントから

protected function createPersonResult_resultHandler(event:ResultEvent):void 
    { 
    currentState="PeopleDetails"; 
    person.pID=event.result as int; 
    peopleDg.dataProvider.addItem(person); //the problem might be here, more below. 
    peopleDg.setSelectedIndex(peopleDg.dataProvider.getItemIndex(person)); 
    peopleDg.ensureCellIsVisible(peopleDg.selectedIndex); 
    } 

、私は追加する人は確かに一つの属性は、各部門からの外国ID(DEPTID)であることを除いて、データグリッドに人物オブジェクトの属性を追加することを参照してください。

答えて

0

deptNameプロパティを設定する必要があると思います。なぜなら、インターフェイスに追加されているときに結合から取得しないからです。だからこのような何かが私が思うトリックを行う必要がありますか?

EDIT:4.5ドロップダウンのための代わりに、コンボボックス

protected function button_clickHandler(event:MouseEvent):void 
{ 
    person.pName=pNameTextInput.text; 
    person.deptID=pDepartmentDropDownList.selectedItem.deptID; //ID of selected department obtained correctly. 
    person.deptName = pDepartmentDropDownList.selectedItem.deptName; 
    if (person.pID == 0) 
    { 
     createPersonResult.token=personService.createPerson(person); 
    } 
    else 
    { 
     updatePersonResult.token=personService.updatePerson(person); 
    } 
} 
+0

使用しているFlex SDKのバージョンは何ですか?私はFlash Builder for PHP 4.5を使用していますが、ドロップダウンリストコンポーネントのコンテンツアシストメニュー(Ctrl + Space)で.selectedLabelを取得できません。 – shailenTJ

+0

コンボボックスの代わりに4.5ドロップダウンで更新されました。そのショットを与えて、私に知らせてください。 :) – Nate

+0

私はこれが「うまくいかない」ことに気づいたが、コメントする前に試してみた。 deptNameはPersonクラスのメンバーではないことに注意してください。つまり、PersonテーブルにdeptNameフィールドはありません。私たちはdeptIDフィールドしか持っていません。また、私のINNER JOINステートメントのために、私はデータグリッドフィールドdeptIDの下にある部署の名前を取得します。私の質問のSQLステートメントから、私はdepartments.deptNameを明確に取得しますが、FB DataGridはそれを見ません。結果はdeptIDの下に置かれます。奇妙な。すべての手がかりは? – shailenTJ

0

私が疑っているもの:上記の選択文は、初めてアプリケーションを初期化/実行したときにのみ実行されます。後で追加するものは、joinステートメントを使用して部門名を戻すselectステートメントを呼び出すことができないため、アプリケーション全体の次のロード/初期化まではidだけが表示されます。

+0

私は同意します。新しく追加された項目のIDを持つSELECT文を実行して、データグリッドの1行だけを更新する方法を知っていますか? – shailenTJ

+0

IDで人の詳細を取得する関数を作成しました。 – shailenTJ

+0

@shailenTJ私はあなたがアプリケーションの初期化中にすべてのDepartmentコレクションをロードした後、IDで部門名を見つけることができ、サーバーに戻らずに、バックエンドへの往復を省くことができます。 –

関連する問題