2

2つのパネルを備えたViewStackがあります。

<mx:ViewStack id="viewstack1" height="243">
<mx:Panel id="gridPanel">
    <mx:DataGrid id="grid" right="10" left="10" top="10" bottom="10" width="300" height="150" itemClick="showDetails(event)">
        <mx:columns>
                <mx:DataGridColumn headerText="ID" dataField="Id"/>
                <mx:DataGridColumn headerText="Summary" dataField="Summary"/>
            </mx:columns>
        </mx:DataGrid>
    </mx:Panel>
    <mx:Panel id="detailsPanel">
        <mx:HBox width="100%" height="100%">
            <mx:VBox height="100%" width="228" id="detailsVbox">
                <mx:Label text="Label" id="itemTitle"/>
                <mx:Text text="Text" id="itemSummary"/>
                <mx:DataGrid height="97">
                    <mx:columns>
                        <mx:DataGridColumn headerText="Property" dataField="col1"/>
                        <mx:DataGridColumn headerText="Value" dataField="col2"/>
                    </mx:columns>
                </mx:DataGrid>
            </mx:VBox>
            <mx:Image source="images/BackButton.png" width="50" height="50" click="viewstack1.selectedChild = gridPanel"/>

        </mx:HBox>
</mx:Panel>     
</mx:ViewStack>

ユーザーに最初のパネルのグリッド項目をクリックしてから、2番目のパネルのパネルにデータをロードしてもらいたい。itemClickedハンドラーでクリックされたアイテムのインデックスの値を取得できますが、detailsPanelにアクセスして、グリッドからの行情報に基づいて値を設定するにはどうすればよいですか?

4

3 に答える 3

2

これがあなたの望むものかどうかはわかりませんが、次のようなことができます。

private function showDetails(event:ListEvent):void {
    itemTitle.text = event.itemRenderer.data.Id;
    itemSummary.text = event.itemRenderer.data.Summary;

    //assuming that the datagrid ID from the details panel is: detailsDatagrid 
    detailsDatagrid.dataProvider = event.itemRenderer.data.Properties;

    viewstack1.selectedChild = detailsPanel;
}

これを機能させるには、ビュースタックに作成ポリシーを追加する必要もあります。

<mx:ViewStack id="viewstack1" height="243" creationPolicy="all">

このようにして、ビュースタックの作成時にすべてのパネルが作成されます(デフォルトでは、必要な場合にのみパネルが作成されます)。これにより、パネルが表示される前に、、、などdetailsPanelitemTitle参照が確実に作成されます。itemSummary

于 2011-03-28T22:55:35.377 に答える
0

私にとって最良の方法は、データバインディングを使用することです。追加のフィールドを紹介するだけ

[Bindable]
private var detailsDataProvider:ArrayCollection;

そして、showDetailsメソッドに詳細を入力します。詳細データを非同期で(たとえばサーバーから)取得する必要がある場合は、データが受信されるまで現在の詳細値をリセットできます。

detailsDataProvider = null;

次に、サーバーデータを入力します。

最終的な変更は、詳細データグリッドにあります。

<mx:DataGrid height="97" dataProvider="{detailsDataProvider}">

それが役に立てば幸い。

于 2011-03-29T21:16:18.617 に答える
0

ここで、このコードは「stackview」の簡単な例を説明します。これを使用すると、同じようにパネルを呼び出すことができます。

于 2011-04-26T12:41:09.890 に答える