flex DataGrid 编辑后保存

<?php
require_once ('./vo/org/corlan/VOAuthor.php');

//conection info
define( "DATABASE_SERVER", "localhost");
define( "DATABASE_USERNAME", "root");
define( "DATABASE_PASSWORD", "");
define( "DATABASE_NAME", "mysite");

class MyService {

    public function getData() {
        //connect to the database.
        $mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
        mysql_select_db(DATABASE_NAME);
        mysql_query("SET NAMES UTF8");
        //retrieve all rows
        $query = "SELECT id_aut, fname_aut, lname_aut FROM authors_aut ORDER BY fname_aut";
        $result = mysql_query($query);

        $ret = array();
        while ($row = mysql_fetch_object($result)) {
            $tmp = new VOAuthor();
            $tmp->id_aut = $row->id_aut;
            $tmp->fname_aut = $row->fname_aut;
            $tmp->lname_aut = $row->lname_aut;
            $ret[] = $tmp;
        }
        mysql_free_result($result);
        return $ret;
    }

    public function saveData($author) {
        if ($author == NULL)
            return NULL;
        //connect to the database.
        $mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
        mysql_select_db(DATABASE_NAME);
        //save changes
        $query = "UPDATE authors_aut SET fname_aut='".$author->fname_aut."', lname_aut='".$author->lname_aut."' WHERE id_aut=". $author->id_aut;
        $result = mysql_query($query);
        return NULL;
    }
}
?>

------------amfphp/services/vo/org/VOAuthor.php-----------------
<?php
class VOAuthor {

    public $id_aut;
    public $fname_aut;
    public $lname_aut;

    // explicit actionscript class
    var $_explicitType = "org.corlan.VOAuthor";
}
?>

--------------------------mxml文件------------------------------------
--------------------RemotingVOAuthor.mxml----------------------
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.controls.dataGridClasses.DataGridColumn;
            import mx.events.DataGridEvent;
            import org.corlan.VOAuthor;
            import mx.controls.Alert;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            import mx.collections.ArrayCollection;

            /**
             * This function is called when an item was edited in the data grid.
             * Calls the saveData() method on the PHP server
             */
            private function save(event:DataGridEvent):void {
                var dataGrid:DataGrid = event.target as DataGrid;
                var dsColumnIndex:Number = event.columnIndex;
                var col:DataGridColumn = dataGrid.columns[dsColumnIndex];
                var newValue:String = dataGrid.itemEditorInstance[col.editorDataField];
                var dsFieldName:String = event.dataField;
                var author:VOAuthor = event.itemRenderer.data as VOAuthor;
                if (newValue == author[dsFieldName])
                    return;
                //get the new value for the first name or last name
                author[dsFieldName] = newValue;
                myRemote.saveData(author);
            }
        ]]>
    </mx:Script>
    <!-- this is the RemoteObject used to make the RPC calls -->
    <mx:RemoteObject id="myRemote" destination="MyService" source="MyService"
            endpoint="http://www.mysite.com/amfphp/gateway.php" showBusyCursor="true"/>

    <mx:VBox top="30" left="100">
        <mx:Button label="Get data" click="{myRemote.getData()}" />
        <mx:DataGrid id="myGrid" dataProvider="{myRemote.getData.lastResult}" editable="true" itemEditEnd="save(event)">
            <mx:columns>
                <mx:DataGridColumn dataField="id_aut" editable="false"/>
                <mx:DataGridColumn dataField="fname_aut"/>
                <mx:DataGridColumn dataField="lname_aut"/>
            </mx:columns>
        </mx:DataGrid>
    </mx:VBox>
</mx:Application>

----------------org/corlan/VOAuthor.as-----------------
package org.corlan {

    [RemoteClass(alias="org.corlan.VOAuthor")]
    [Bindable]
    public class VOAuthor {

        public var id_aut:int;
        public var fname_aut:String;
        public var lname_aut:String;
    }
}


//----------------------------分析-------------------------------
1 面向对象的设计思路,抽象出两个模型,一个是php,一个是.as格式,互相对应,这两个类的成员变量命名是一致的。

2 注意文件的组织方式,模型文件均放在相关目录下例如:org/corlan/VOAuthor.as,类文件首字母大写

3 注意{myRemote.getData()},调用以后没有立即处理数据,而是通过"{myRemote.getData.lastResult}"的lastResult属性去读取缓存中的访问结果。

4 前端的mxml的script中:
var dataGrid:DataGrid = event.target as DataGrid; //获取当前编辑的单元格对象
var dsColumnIndex:Number = event.columnIndex;   //列号
var col:DataGridColumn = dataGrid.columns[dsColumnIndex]; //?
var newValue:String = dataGrid.itemEditorInstance[col.editorDataField]; //读取新值,这里要研究下
                                                                                                                 //dataGrid各个属性的含义

var author:VOAuthor = event.itemRenderer.data as VOAuthor; //获取当前显示的单元格对象
author[dsFieldName] = newValue; //更新显示状态

5 webservice的方式直接调用php中的存储方法:
myRemote.saveData(author);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值