Flex AdvancedDataGrid c / p行问题

时间:2011-09-24 13:58:21

标签: actionscript-3 flex air

我是Flex / AS3开发的新手,我遇到了一个问题,现在让我感到困惑。我使用的AdvancedDataGrid包含一些列,ArrayCollection作为提供者。我想制作一个复制/粘贴功能,以便可以选择,复制多个行,然后粘贴到所选(或最后选择的行)下面。

问题是当我将数据从一行复制到另一行时,这些行都会在鼠标悬停时突出显示(上层实例甚至无法选择) - 就像在本主题中一样:Flex DataGrid/DataProvider bug?

首先我认为这是复制引用的问题,但即使我使用ObjectUtil.copy()方法,它仍然存在。此外,我手动更改了一个名为“order”的属性,以便ArrayCollection的对象不相同,但它没有帮助。 Dataprovider被称为newTreatmentData,而DataGrid被称为newTreatmentDG

欢迎任何建议。

以下是相关代码的一部分:

        private function getSelectedRow(event:Event):void
        {
            selectedRow = newTreatmentDG.selectedIndex;
        }
        private function copySelection(event:Event):void
        {
            bufferData = new ArrayCollection();
            var sortedIndices:Array = newTreatmentDG.selectedIndices.sort();
            for (var i:int = 0; i < newTreatmentDG.selectedIndices.length; i++){                        //copy selected rows to the buffer
                var j:int = sortedIndices[i];
                bufferData.addItem(newTreatmentData[j]);
            }
        }
        private function pasteSelection(event:Event):void
        {
            var rowsToMove:int = newTreatmentData.length - selectedRow - 1;                                 //number of rows to move after pasting

            for (var i:int = 1; i <= bufferData.length; i++){                                                   
                if (selectedRow + bufferData.length + i > newTreatmentData.length){                             // adding objects to the array collection to avoid range error
                    newTreatmentData.addItem(null);
                }
            }
                for (i = 1; i <= rowsToMove; i++){  
                newTreatmentData[selectedRow + bufferData.length + i] = ObjectUtil.copy(newTreatmentData[selectedRow + i])  //first move the rows to "give room" for pasting        
                newTreatmentData[selectedRow + bufferData.length + i].order = selectedRow + bufferData.length + i;          //manually changing the "order" property, but it doesn't help
            }
            for (var j:int = 1; j <= bufferData.length; j++){                                           //paste the data from the buffer
                newTreatmentData[selectedRow + j] = ObjectUtil.copy(bufferData[j-1])
                newTreatmentData[selectedRow + j].order = selectedRow + j;                              //again changing the order property
            }
            newTreatmentData.refresh();
        }

1 个答案:

答案 0 :(得分:1)

我通过更改mx_internal_uid dataprovider中每个对象的ArrayCollection属性来解决此问题。似乎AdvancedDataGrid检查它是否相等。我假设(并且你知道他们对假设的看法)当你将其值复制到另一个对象(因此UID中的U;)时,对象的UID会发生变化。