Flex:如何在窗体中显示DataGrid selectedItems详细信息

时间:2009-10-18 06:38:32

标签: flex

很抱歉这篇长篇文章。但问题很小但需要详细说明。感谢阅读和帮助:))

我使用HTTPService POST方法调用一个php文件,该文件返回xml类型的结果,如

<user>
 <name>jones</name>
 <age>34</age>
</user>

这个结果是在php文件查询数据库之后获得的。该数据库包含其他信息(高度,性别,教育和地址)

现在我在DataGrid下面有一个 DataGrid (有两列:NAME和AGE)和一个 Form 。我使用 dataprovider =“{userRequest.lastResult.User}”属性在DataGrid中显示了上面提到的xml数据。

我现在想要使用 itemclick = itemClickEvent(事件),以便当用户点击DataGrid的一行时,与点击的行相关的其他信息如(高度,性别,教育等)可能会出现在GUI中DataGrid下面的表单中。现在我的itemClickEvent,看起来像:

private function itemClickEvent(event:ListEvent):void
{
  clickRow.text=String(event.rowIndex);
   //Don't know what should i assign to following labels...
   //height.text=
   //gender.text=
   //edu.text=
}

表格的结构:                                                                                                                                   

我有没有办法从 itemClickEvent函数访问xml数据,因为DataGrid结构标题看起来像

<mx:DataGrid id="dgUserRequest" dataProvider="{userRequest.lastResult.user}" x="28.7" y="36" width="525" height="149" itemClick="itemClickEvent(event);">

并且HTTPService标头看起来像

<mx:HTTPService id="userRequest" url="request.php" method=POST">
     <mx:request xmlns="">
       <getResult>send</getResult>
     </mx:request>
</mx:HTTPService>

我的php文件的相关部分是:

if($_POST['getResult'] == 'send')
{
   $Result = mysql_query("SELECT * FROM userInfo" );
   $Return = "<userInfo>";
   while ( $row = mysql_fetch_object( $Result ) )
   {
     $Return .= "<user><name>".$row->name."</name><age>".$row->age."</age><height>". $row->height."</height><gender>". $row->gender."</gender><education>".$row->education."</education></user>";
   }
   $Return .= "</userInfo>";
   mysql_free_result( $Result );
   print ($Return);

}

1 个答案:

答案 0 :(得分:2)

如果您使用userRequest.lastResult.user.name作为数据网格的dataProvider,那么您在名称和年龄列中的dataField是什么?

还有另一种简单的方法可以做到这一点。假设xml结构类似于:

<someRootTag>
 <user>
  <name>jones</name>
  <age>34</age>
  <height>180cm</height>
 </user>
 <user>
  <name>john</name>
  <age>4</age>
  <height>100cm</height>
 </user>
 <!--more <user/> tags-->
</someRootTag>

您可以使用数据绑定来实现此目的。请注意resultFormat的{​​{1}}已从默认HTTPService

更改为e4x
object

您需要的唯一AS代码是从应用程序的<mx:HTTPService id="service" url="data.xml" resultFormat="e4x"/> <mx:DataGrid id="dg" dataProvider="{service.lastResult.user}"> <mx:columns> <mx:DataGridColumn dataField="name"/> <mx:DataGridColumn dataField="age"/> </mx:columns> </mx:DataGrid> <mx:Form> <mx:FormItem label="Name"> <mx:TextInput text="{dg.selectedItem.name}"/> </mx:FormItem> <mx:FormItem label="Age"> <mx:TextInput text="{dg.selectedItem.age}"/> </mx:FormItem> <mx:FormItem label="Height"> <mx:TextInput text="{dg.selectedItem.height}"/> </mx:FormItem> </mx:Form> 调用service.send()