Flex AdvancedDataGrid c / p строки проблема - PullRequest
1 голос
/ 24 сентября 2011

Я новичок в разработке Flex / AS3, и я столкнулся с проблемой, которая меня беспокоит некоторое время.Я использую AdvancedDataGrid с некоторыми столбцами и ArrayCollection в качестве поставщика.Я хотел бы создать функцию копирования / вставки, чтобы можно было выбирать, копировать и вставлять несколько строк под выбранной (или последней выбранной строкой).

Проблема заключается в том, что я копирую данные из одной строкис другой стороны, обе эти строки подсвечиваются при наведении курсора мыши (верхний экземпляр даже не выбирается) - как в этом разделе: Ошибка Flex DataGrid / DataProvider?

Сначала я подумалэто была проблема копирования ссылки, но она сохраняется, даже если я использую ObjectUtil.copy() метод.Кроме того, я вручную изменяю одно из свойств, называемых «порядок», чтобы объекты 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 Ответ

1 голос
/ 26 сентября 2011

Я решил это, изменив свойство mx_internal_uid каждого объекта в dataprovider ArrayCollection.Кажется, что AdvancedDataGrid проверяет, равны ли строки.Я предположил (и вы знаете, что они говорят о предположениях), что UID объекта изменяется, когда вы копируете его значение в другой объект (следовательно, U в UID;)).

...