简体   繁体   English

如何防止Flex DataGrid中的数据绑定?

[英]How to prevent data binding in flex datagrid?

I have two Datagrid in flex. 我在Flex中有两个Datagrid。 I am binding data from Datagrid1 to Datagrid2 like 我将数据从Datagrid1绑定到Datagrid2

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

If I delete Datagrid2 data then automatically another Datagrid1 deleted . 如果我删除Datagrid2数据,则会自动删除另一个Datagrid1

So I don't want delete data in Datagrid1 . 所以我不想删除Datagrid1数据。 how can i do that , But I have other option for delete data to Datagrid1 ? 我该怎么做,但是我还有其他选择可以将数据删除到Datagrid1吗?

That's mainly because Datagrid1.dataProvider and Datagrid2.dataProvider are pointers. 这主要是因为Datagrid1.dataProvider和Datagrid2.dataProvider是指针。 Every time when you set object1 = object2, they will share the same memory, because you give them the same address to look at. 每次设置object1 = object2时,它们将共享相同的内存,因为您给它们提供了相同的地址来查看。

Many simple way to remove such referencing. 删除此类引用的许多简单方法。

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

or 要么

datagrid2.dataProvider = ObjectUtil.copy(datagrid1.dataProvider) as ArrayCOllection; 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>

use following... 使用以下...

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

or 要么

private var _coll:ArrayCollection;

private function setData():void{
   Datagrid1.dataProvider =  _coll;
   Datagrid2.dataProvider =  ObjectUtil.copy(_coll) as ArrayCollection;
}

in the above cases; 在上述情况下; if you delete,change item from one datagrid ll not affect to another datagrid... 如果删除,则从一个数据网格更改项目不会影响到另一个数据网格...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM