PDA

Volledige versie bekijken : [FLEX2] Datagrid drag and drop vraagje


ThaLyric
%Europe/Berlin %563 %2007, 13:32
Hoi,

Ik heb 2 datagrids. Ik kan items van DG1 naar DG2 drag and droppen. Probleem is nu dat ik dus een item die ik al een x eerder heb gedropped vanuit DG1 naar DG2 meerdere keren kan dropen. En dat wi lik eigenlijk niet. Normaal zou je dan de item uit DG1 verwijderen, maar dat wil ik dus niet. Iemand een tip voor me?

mijn code:


<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="700" height="250" borderStyle="solid" creationComplete="initApp();">

<mx:Script>
<![CDATA[

private function initApp():void {
srcgrid.dataProvider = [
{Artist:'Carole King', Album:'Tapestry', Price:11.99},
{Artist:'Paul Simon', Album:'Graceland', Price:10.99},
{Artist:'Original Cast', Album:'Camelot', Price:12.99},
{Artist:'The Beatles', Album:'The White Album', Price:11.99}
];

destgrid.dataProvider =[];
}
]]>
</mx:Script>

<mx:HBox>
<mx:VBox>
<mx:Label text="Available Albums"/>
<mx:DataGrid id="srcgrid" allowMultipleSelection="true"
dragEnabled="true" dropEnabled="false" dragMoveEnabled="false">
<mx:columns>
<mx:DataGridColumn dataField="Artist"/>
<mx:DataGridColumn dataField="Album"/>
<mx:DataGridColumn dataField="Price"/>
</mx:columns>
</mx:DataGrid>
</mx:VBox>

<mx:VBox>
<mx:Label text="Buy These Albums"/>
<mx:DataGrid id="destgrid" allowMultipleSelection="true"
dragEnabled="false" dropEnabled="true" dragMoveEnabled="false">
<mx:columns>
<mx:DataGridColumn dataField="Artist"/>
<mx:DataGridColumn dataField="Album"/>
<mx:DataGridColumn dataField="Price"/>
</mx:columns>
</mx:DataGrid>
</mx:VBox>
</mx:HBox>
</mx:Application>

TheDutch
%Europe/Berlin %877 %2007, 21:03
Dan moet je het DataGrid component extenden en (uit mijn hoofd) de dragDropHandler, dragCompleteHandler, en dragOverHandler functies overriden met je eigen code. Je wilt standaard functionaliteiten uitzetten vandaar dat de drag events je hiermee niet kunnen helpen :).

ThaLyric
%Europe/Berlin %487 %2007, 11:41
Hmm ..ok, is het dan beter dat ik een aparte component maak van DG2 die gekoppeld is aan een AS classe die extends DG? En in die classe dan de events opvangen?

TheDutch
%Europe/Berlin %622 %2007, 14:56
Zoals ik al reeds heb aangegeven kan je dit niet oplossen door de events op te vangen. Je moet gewoon met AS de DataGrid class extenden en die gebruiken als component in plaats van het standaard DataGrid component :).

ThaLyric
%Europe/Berlin %723 %2007, 17:21
ah,

kreeg van een kennis van mij de volgende link:

http://thanksmister.com/?p=21

daarin staat een sample : http://thanksmister.com/dnddatagrid/index.html

en dat is precies wat ik bedoelde. En als ik naar de code kijk, snap ik nu ook jouw comments ;-)


beetje jammer dat Flex2 nog niet iets had van dat je in je target kon instellen van duplicate entries en op welk data je moet kijken dan .. dus voorbeeld


<mx:Datagrid duplicateEntries="false" duplicateEntriesFilterOn="myUniqueId">



anyway, thnx voor de tijd en moeite ;-)

TheDutch
%Europe/Berlin %827 %2007, 19:51
Dit was eigenlijk toch niet wat ik helemaal bedoelde, wel een creatieve oplossing trouwens. De property "dropEnabled" uit laten staan zodat je de hele drop functionaliteit kunt herschrijven in de event handler. Buiten dat het creatief is is het eigenlijk niet netjes en slecht in gebruik.

Waat ik op doelde was dat wanneer je de DataGrid class extend naar je eigen DataGrid class je dit soort functionaliteiten wel kunt maken:

<mx:Datagrid duplicateEntries="false" duplicateEntriesFilterOn="myUniqueId">

Dit is veel netter en makkelijker in gebruik :).

Ik zou zeggen blijf lekker Flex'en en over een tijdje wil je niets anders meer dan op deze manier werken ;).