我有一个包含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>
我想让用户单击第一个面板中的网格项,然后在第二个面板的面板中加载数据。我可以获取itemClicked处理程序中单击项的索引值,但是如何访问detailsPanel以根据Grid中的行信息设置值?
答案 0 :(得分: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">
这样,将在创建视图堆栈时创建所有面板(默认情况下,仅在需要时创建它们)。这可确保您在面板可见之前获得detailsPanel
,itemTitle
,itemSummary
等参考。
答案 1 :(得分:0)
至于我,最好的方法是使用数据绑定。只需介绍其他字段
[Bindable]
private var detailsDataProvider:ArrayCollection;
并在showDetails方法中填写详细信息。如果需要异步获取详细信息数据(例如,从服务器获取),则可以重置当前详细信息值,直到收到数据:
detailsDataProvider = null;
然后用服务器数据填充它。
最后的更改是详细数据网格:
<mx:DataGrid height="97" dataProvider="{detailsDataProvider}">
希望它有所帮助。
答案 2 :(得分:0)
这里的代码将解释'stackview'的简单示例。使用它可以调用面板相同。