打印

[FLEX] 关于两个datagrid拖动生成数据的问题?

运行下面的程序大家会发现,拖动datagrid1的行数据到datagrid2中去后,会在datagrid2自动生成两份,这是因为我在datagrid2上添加了onGridDragDrop事件( 通过脚本来为datagrid2的dataProvider添加coll.addItem(arr[0])),我的问题是在拖动后能否不让系统在datagrid2中自动生成被拖动那一份的行数据,而根据我的脚本coll.addItem(arr[0]生成行数据。


<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/200 ... -datagrid-controls/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="horizontal"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Array id="arr">
        <mx:Object colA="Item A.0" colB="Item B.0" colC="Item C.0" />
        <mx:Object colA="Item A.1" colB="Item B.1" colC="Item C.1" />
        <mx:Object colA="Item A.2" colB="Item B.2" colC="Item C.2" />
        <mx:Object colA="Item A.3" colB="Item B.3" colC="Item C.3" />
        <mx:Object colA="Item A.4" colB="Item B.4" colC="Item C.4" />
        <mx:Object colA="Item A.5" colB="Item B.5" colC="Item C.5" />
        <mx:Object colA="Item A.6" colB="Item B.6" colC="Item C.6" />
        <mx:Object colA="Item A.7" colB="Item B.7" colC="Item C.7" />
        <mx:Object colA="Item A.8" colB="Item B.8" colC="Item C.8" />
        <mx:Object colA="Item A.9" colB="Item B.9" colC="Item C.9" />
    </mx:Array>

    <mx:ApplicationControlBar dock="true">
        <mx:Form>
            <mx:FormItem label="DataGrid #1:"
                    direction="horizontal">
                <mx:CheckBox id="dg1_dragEnabled"
                        label="dragEnabled" />
                <mx:CheckBox id="dg1_dropEnabled"
                        label="dropEnabled" />
                <mx:CheckBox id="dg1_dragMoveEnabled"
                        label="dragMoveEnabled" />
            </mx:FormItem>
            <mx:FormItem label="DataGrid #2:"
                    direction="horizontal">
                <mx:CheckBox id="dg2_dragEnabled"
                        label="dragEnabled" />
                <mx:CheckBox id="dg2_dropEnabled"
                        label="dropEnabled" />
                <mx:CheckBox id="dg2_dragMoveEnabled"
                        label="dragMoveEnabled" />
            </mx:FormItem>
        </mx:Form>
    </mx:ApplicationControlBar>

    <mx:VBox width="50%">
        <mx:Label text="DataGrid #1" />
        <mxataGrid id="dataGrid1"  allowMultipleSelection="true" allowDragSelection="true"
                width="100%"
                rowHeight="22"
                dataProvider="{arr}"
                dragEnabled="{dg1_dragEnabled.selected}"
                dragMoveEnabled="{dg1_dragMoveEnabled.selected}"
                dropEnabled="{dg1_dropEnabled.selected}"
                verticalScrollPolicy="on">
            <mx:columns>
                <mxataGridColumn dataField="colA"
                        headerText="Column A" />
                <mxataGridColumn dataField="colB"
                        headerText="Column B" />
                <mx:DataGridColumn dataField="colC"
                        headerText="Column C" />
            </mx:columns>
        </mx:DataGrid>
        <mx:Label text="{dataGrid1.dataProvider.length} items" />
    </mx:VBox>

    <mx:VBox width="50%">
        <mx:Label text="DataGrid #2" />
        <mx:DataGrid id="dataGrid2"   dragDrop="onGridDragDrop( event)"  
                width="100%"
                rowHeight="22"
                dataProvider="{coll}"
                dragEnabled="{dg2_dragEnabled.selected}"
                dragMoveEnabled="{dg2_dragMoveEnabled.selected}"
                dropEnabled="{dg2_dropEnabled.selected}"
                verticalScrollPolicy="on">
            <mx:columns>
                <mx:DataGridColumn dataField="colA"
                        headerText="Column A" />
                <mx:DataGridColumn dataField="colB"
                        headerText="Column B" />
                <mx:DataGridColumn dataField="colC"
                        headerText="Column C" />
                 <mx:DataGridColumn dataField="cold"
                        headerText="Column C" />
            </mx:columns>
        </mx:DataGrid>
        <mx:Label text="{dataGrid2.dataProvider.length} items" />
    </mx:VBox>
<mx:Script>
       <![CDATA[
              import mx.core.DragSource;
           import mx.events.DragEvent;
           import mx.collections.ArrayCollection;
        
           private var coll:ArrayCollection=new ArrayCollection([{colA:"Martin Foo", colB:25,colC:"ASDF"},{colA:"Martin", colB:26,colC:"ASDF"}]);
          
          
       private function onGridDragDrop( event:DragEvent ) : void        {
              var ds:DragSource = event.dragSource;            
              var dropTarget:DataGrid = DataGrid(event.currentTarget);
              var arr:Array;
              if( ds.hasFormat("items") ) {
                  arr = ds.dataForFormat("items") as Array;
                  coll.addItem(arr[0]);
                  coll.refresh();      
             }
              
}
              
       ]]>
</mx:Script>

</mx:Application>