2011-09-24 50 views
1

我是Flex/AS3開發中的新手,我偶然發現了一個讓我感到困惑的問題。我正在使用AdvancedDataGrid,某些列和ArrayCollection作爲提供者。我想製作一個複製/粘貼功能,以便可以選擇,複製多個行,然後粘貼到所選(或最後一個選定行)的下方。Flex AdvancedDataGrid c/p行問題

問題是,當我從一個行的數據複製到另一個,這兩個行成爲突出鼠標懸停(上例甚至沒有選擇) - 就像在本主題:Flex DataGrid/DataProvider bug?

第一我認爲這是複製引用的問題,但即使使用ObjectUtil.copy()方法,它仍然存在。此外,我手動更改其中一個名爲「order」的屬性,以使ArrayCollection的對象不相同,但它沒有幫助。 Dataprovider叫做newTreatmentData,而DataGridnewTreatmentDG

任何建議都更受歡迎。

下面的代碼的一部分是相關的:

 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(); 
     } 
+0

嗯,似乎只有圖形部分行突出顯示和選擇是竊聽,我可以訪問和單獨更改所有行。 – Shpiro

+0

如果'newTreatmentData'是一個ArrayCollection,那麼你如何選擇基於索引的選擇呢?它不應該工作。 ArrayCollection不支持方括號。 –

+0

基於索引的行切換,選擇,複製和粘貼按預期工作,使用方括號。爲什麼它不工作?糾正我,如果我錯了,但我想,因爲ArrayCollection是一個數組的包裝,它應該有相同或至少類似的功能。 – Shpiro

回答

1

我解決它通過改變每個對象的mx_internal_uid財產在dataproviderArrayCollection。看來AdvancedDataGrid會檢查它以查看行是否相等。我假設(你知道他們對假設的看法),當你將對象的UID複製到另一個對象(因此UID中的U)時,對象的UID會發生變化。

相關問題