2012-04-12 3 views
0

У меня есть два Datagrid в flex. Я привязки данных от Datagrid1 к Datagrid2 какКак предотвратить привязку данных в flex datagrid?

(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

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

в указанных выше случаях; если вы удалите, измените элемент из одного datagrid ll, не повлияйте на другой datagrid ...

Смежные вопросы