2012-04-12 10 views
0

私はFlexで2つのDatagridを持っています。私はその後、自動的に別のDatagrid1が削除Datagrid2データを削除した場合、私はフレックスデータグリッドのデータバインディングを防ぐには?

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

ようDatagrid2Datagrid1からのデータを結合しています。

だから、私はDatagrid1のデータを削除したくありません。どのように私はそれを行うことができますが、私はDatagrid1にデータを削除するための他のオプションがありますか?上記の例では

答えて

1

これは主にDatagrid1.dataProviderとDatagrid2.dataProviderがポインタであるためです。 object1 = object2を設定するたびに、同じアドレスを見るため同じメモリを共有します。

このような参照を削除する多くの簡単な方法。

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

又は

datagrid2.dataProvider = ObjectUtil.copyのArrayCollectionとして(datagrid1.dataProvider)。

<?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

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; 
} 

。あなたが削除すると、あるデータグリッドから項目を変更して別のデータグリッドに影響を与えません。