2011-06-02 42 views
0

我正在使用Flash Builder 4.5 for PHP中的工资管理系统。我正在使用Flex数据管理系统。我有几个问题,这些问题如下:使用Flex数据管理和PHP的问题

  1. 当我添加一个项目到数据网格,不提交它,我无法删除它。这是可以理解的,因为只有当项目位于数据库中时,删除才起作用,并且在将项目提交给数据库之前,我没有获取该项目的id(主键)。

当我删除项目时,它应该从数据网格中移除(这可以通过从datagrid的数据提供程序中移除项目来实现),但问题是当我提交时 - 它保存到数据库。我无法找到解决这个问题的办法。

关于Flex 4的一些很好的书籍/教程,重点介绍PHP和Flex企业应用程序开发,并用例子说明应用程序开发?

回答

0

这就是我在这种情况下所做的。对于那些尚未保存在我的dataProvider行(他们有ID = 0或东西)被删除了,我只是用喜欢的东西删除它们:

myArrayCollection.removeItemAt(myArrayCollection.getItemIndex(myDataGrid.selectedItem)); 

这样被删除的所有行永远不会使它到后端。

0

我没有使用datagrid(或ArrayCollection作为dataProvider),所以虽然@Jason Towne的解决方案一般,但它不是我的具体情况的解决方案。

我解决了“不能够删除未提交的项目”通过使用项目而不是ITEMID托管DELETE方法Flex中的数据问题。 Flash Builder的自动生成的ActionScript方法和PHP代码使用itemID作为参数,该参数不适用于数据管理的DELETE,直到记录保存到数据库后。使用实际的项目作为参数在DELETE方法中的作用是删除已提交和未提交的更改。 PHP代码将不得不被修改。

我使用服务器端类型,所以修改后的PHP代码(这非常类似于FB自动生成的PHP代码)的样子:

/** 
* Deletes the item corresponding to the passed primary key value from 
* the table. Note: NOT using primary key anymore - use item reference. 
* 
* Add authorization or any logical checks for secure access to your data 
* 
* @param MessageScheduleItem $item 
* @return void 
*/ 
public function delete_messageScheduleItem($item) { 

    $stmt = mysqli_prepare($this->connection, "DELETE FROM $this->tablename WHERE ID = ?"); 
    $this->throwExceptionOnError(); 

    mysqli_stmt_bind_param($stmt, 'i', $item->ID); 
. 
. 
... etc. 

Flex的代码,然后:

messageScheduleItemService.delete_messageScheduleItem(item);