2012-04-12 96 views
0

我在Flex中有两个Datagrid。我从Datagrid1数据绑定到Datagrid2如何防止flex数据网格中的数据绑定?

(Datagrid2.dataProvider=Datagrid1.dataProvider as ArrayCollection;) 

如果我删除Datagrid2数据,然后自动另一个Datagrid1删除。

所以我不想删除Datagrid1中的数据。我该怎么做,但我有其他选择删除数据到Datagrid1

回答

1

这主要是因为Datagrid1.dataProvider和Datagrid2.dataProvider是指针。每次当你设置object1 = object2时,他们将共享相同的内存,因为你给他们相同的地址来查看。

许多简单的方法来删除这种引用。

datagrid2.dataProvider = datagrid1.dataProvider.toArray();

datagrid2.dataProvider = ObjectUtil.copy(datagrid1.dataProvider)作为ArrayCollection的;

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> 

    <mx:Script> 
     <![CDATA[ 

      private function deleteFromDataGrid1():void { 
       if(datagrid1.selectedIndex > -1) 
        myAC.removeItemAt(datagrid1.selectedIndex); 

       myAC.refresh(); 
      } 

      private function deleteFromDataGrid2():void { 
       if(datagrid2.selectedIndex > -1) 
        datagrid2.dataProvider.removeItemAt(datagrid2.selectedIndex); 
      } 
     ]]> 
    </mx:Script> 

    <!-- An ArrayCollection with an array of objects --> 
    <mx:ArrayCollection id="myAC"> 
     <!-- Use an mx:Array tag to associate an id with the array. --> 
     <mx:Array id="myArray"> 
      <mx:Object label="MI" data="Lansing"/> 
      <mx:Object label="MO" data="Jefferson City"/> 
      <mx:Object label="MA" data="Boston"/> 
      <mx:Object label="MT" data="Helena"/> 
      <mx:Object label="ME" data="Augusta"/> 
      <mx:Object label="MS" data="Jackson"/> 
      <mx:Object label="MN" data="Saint Paul"/> 
     </mx:Array> 
    </mx:ArrayCollection> 

    <mx:ApplicationControlBar> 
     <mx:Button id="myButton" label="deleteFromDataGrid1" click="deleteFromDataGrid1()"/> 
     <mx:Button id="myButton2" label="deleteFromDataGrid2" click="deleteFromDataGrid2()"/> 
    </mx:ApplicationControlBar> 

    <mx:HBox width="100%" horizontalAlign="center" height="100%"> 
    <mx:DataGrid id="datagrid1" dataProvider="{myAC}" height="100%"/> 

    <mx:DataGrid id="datagrid2" dataProvider="{datagrid1.dataProvider.toArray()}" height="100%"/> 
</mx:HBox> 

</mx:Application> 
+0

感谢混音。它工作正常 – user1328256 2012-05-14 10:06:50

0

使用以下...

(Datagrid2.dataProvider = ObjectUtil.copy(Datagrid1.dataProvider) as ArrayCollection;) 

private var _coll:ArrayCollection; 

private function setData():void{ 
    Datagrid1.dataProvider = _coll; 
    Datagrid2.dataProvider = ObjectUtil.copy(_coll) as ArrayCollection; 
} 
在上述情况下

;如果你删除,从一个数据网格更改项目不会影响到另一个数据网格...