我是Flex/AS3開發中的新手,我偶然發現了一個讓我感到困惑的問題。我正在使用AdvancedDataGrid
,某些列和ArrayCollection
作爲提供者。我想製作一個複製/粘貼功能,以便可以選擇,複製多個行,然後粘貼到所選(或最後一個選定行)的下方。Flex AdvancedDataGrid c/p行問題
問題是,當我從一個行的數據複製到另一個,這兩個行成爲突出鼠標懸停(上例甚至沒有選擇) - 就像在本主題: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();
}
嗯,似乎只有圖形部分行突出顯示和選擇是竊聽,我可以訪問和單獨更改所有行。 – Shpiro
如果'newTreatmentData'是一個ArrayCollection,那麼你如何選擇基於索引的選擇呢?它不應該工作。 ArrayCollection不支持方括號。 –
基於索引的行切換,選擇,複製和粘貼按預期工作,使用方括號。爲什麼它不工作?糾正我,如果我錯了,但我想,因爲ArrayCollection是一個數組的包裝,它應該有相同或至少類似的功能。 – Shpiro