flex4

今天我发现了一个问题
就是两个购物车之间的拖拽功能的实现,对于增强型的控件之间的拖拽,非常简单,例如将两个DataGrid1,和DataGrid2,将DataGrid1中的数据向 DataGrid2之间拖拽数据,很简单,就是将DataGrid1中 dragenable=ture ,DataGrid2中的dropenable=true,但是如何判断重复呢
下面 DG_to_DG
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
   xmlns:s="library://ns.adobe.com/flex/spark"
   xmlns:mx="library://ns.adobe.com/flex/mx"
   minWidth="955" minHeight="600"
   creationComplete="prodData.send()">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.DragEvent;
import mx.rpc.events.ResultEvent;

[Bindable]
private var products:ArrayCollection
[Bindable]
private var targetListDP:ArrayCollection=new ArrayCollection();

private function resultHandler(event:ResultEvent):void{
products=event.result.catalog.product;

}
private function targetList_dragDropHandler(event:DragEvent):void
{
var dgRow:Object=event.dragSource.dataForFormat("items");

// targetList.dataProvider.addItem(targetList.dataProvider.length);

var s:Array=targetGrid.dataProvider.toArray();
//trace(s);
var i:int;
var flag:Boolean;
flag=false;
for(i=0;i<s.length;i++)
{
trace( s[i].name );
if( dgRow[0].name == s[i].name )
{
flag=true;
break;
}
}

if( flag == false)
targetGrid.dataProvider.addItem(dgRow[0]);

//trace(targetList.dataProvider);
event.preventDefault();
}

]]>
</fx:Script>

<s:layout>
<s:VerticalLayout gap="50"
paddingLeft="20" paddingTop="20"/>
</s:layout>

<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<s:HTTPService id="prodData"
url="http://www.flexgrocer.com/product.xml"
result="resultHandler(event)"/>
</fx:Declarations>

<mx:DataGrid id="initiatorGrid"
dataProvider="{products}" dragEnabled="true" dropEnabled="true">
<mx:columns>
<mx:DataGridColumn dataField="name" headerText="Product"/>
<mx:DataGridColumn dataField="cost" headerText="Price"/>
<mx:DataGridColumn dataField="isLowFat" headerText="Low Fat"/>
<mx:DataGridColumn dataField="isOrganic" headerText="Organic"/>
</mx:columns>
</mx:DataGrid>


<mx:DataGrid id="targetGrid" dataProvider="{targetListDP}"
dragEnabled="true" dropEnabled="true" dragDrop="targetList_dragDropHandler(event)">
<mx:columns>
<mx:DataGridColumn dataField="name" headerText="Product"/>
<mx:DataGridColumn dataField="category" headerText="Category"/>
</mx:columns>
</mx:DataGrid>

</s:Application>
下面DG_to_list
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
   xmlns:s="library://ns.adobe.com/flex/spark"
   xmlns:mx="library://ns.adobe.com/flex/mx"
   minWidth="955" minHeight="600"
   creationComplete="prodData.send()">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.DragEvent;
import mx.rpc.events.ResultEvent;

[Bindable]
private var products:ArrayCollection;
[Bindable]
private var targetListDP:ArrayCollection=new ArrayCollection();

private function resultHandler(event:ResultEvent):void{
products=event.result.catalog.product;
}
private function targetList_dragDropHandler(event:DragEvent):void
{
var dgRow:Object=event.dragSource.dataForFormat("items");

// targetList.dataProvider.addItem(targetList.dataProvider.length);

var s:Array=targetList.dataProvider.toArray();
//trace(s);
var i:int;
var flag:Boolean;
flag=false;
for(i=0;i<s.length;i++)
{
trace( s[i].toString() );
if( dgRow[0].name == s[i].toString() )
{
flag=true;
break;
}
}

if( flag == false)
targetList.dataProvider.addItem(dgRow[0].name);

//trace(targetList.dataProvider);
event.preventDefault();
}
]]>
</fx:Script>

<s:layout>
<s:VerticalLayout gap="30"
paddingLeft="20" paddingTop="20"/>
</s:layout>

<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<s:HTTPService id="prodData"
url="http://www.flexgrocer.com/product.xml"
result="resultHandler(event)"/>
</fx:Declarations>

<mx:DataGrid id="initiatorGrid"
dataProvider="{products}"
dragEnabled="true">
<mx:columns>
<mx:DataGridColumn dataField="name" headerText="Product"/>
<mx:DataGridColumn dataField="cost" headerText="Prine"/>
<mx:DataGridColumn dataField="isLowFat" headerText="Low Fat"/>
<mx:DataGridColumn dataField="isOrganic" headerText="Organic"/>
</mx:columns>
</mx:DataGrid>

<s:List id="targetList"
width="200"
dropEnabled="true"
dataProvider="{targetListDP}"
dragDrop="targetList_dragDropHandler(event)"/>
</s:Application>

你可能感兴趣的:(flex4)