【问题标题】:Flex : How to display a DataGrid selectedItem's details in a FormFlex:如何在表单中显示 DataGrid selectedItem 的详细信息
【发布时间】:2009-10-18 06:38:31
【问题描述】:

很抱歉这篇长文。然而,这个问题很小,但需要完整的细节。感谢阅读和帮助:)

我使用 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(event) 以便当用户单击 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=
}

表单的结构:

鉴于 DataGrid 结构标题看起来像

,我有什么方法可以从 itemClickEvent 函数访问 xml 数据?
<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);

}

【问题讨论】:

    标签: apache-flex


    【解决方案1】:

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

    还有另一种简单的方法可以做到这一点。假设 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>
    

    您可以使用数据绑定来实现这一点。请注意,HTTPServiceresultFormat 已从默认的 object 更改为 e4x

    <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>
    

    您需要的唯一 AS 代码是从应用程序的 creationComplete 调用 service.send()

    【讨论】:

    • 对不起,我打错了。我正在使用 dataProvider=userRequest.lastResult.user 并且列的数据字段是“名称”和“年龄”。无论如何,感谢您的解决方案,但它不起作用。 (详情请看我的回答)
    • 这段代码有效,我测试过了。但是,如果您更改 resultFormat 它将不起作用。我对php不太感兴趣,但这似乎还可以。它打印什么?
    • 您必须编辑 httpservice 以包含所需的帖子数据。
    • result=trace(service.lastResult); 添加到 HTTPService 标记以查看从 php 发送的具体内容。
    • php 返回以下字符串 "John345.5male性别>Phd Computer ScienceGessy325.5female博士计算机科学"
    猜你喜欢
    • 2010-11-28
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多