Valeu beck ! Entendi sim só nao tinha ideia como resolver
;-) On 23 maio, 08:55, Beck Novaes <[EMAIL PROTECTED]> wrote: > Olá rramires, > > O problema ocorre porque o header (estranhamente) é considerado uma > linha no DataGrid. Desta forma, quando você tenta arrastar uma coluna, > o DataGrid tenta arrastar a "Linha Header" para uma outra posição, o > que gera um erro em tempo de execução pois o objeto que está sendo > arrastando é do tipo DataGridColumn e não do mesmo tipo das "Linhas de > Verdade" do DataGrid. Para resolver este problema é preciso cancelar o > tratamento Default dos eventos de Drag do DataGrid caso o elemento > arrastado seja do tipo DataGridColumn (Linha Header). > > Não sei se consegui explicar o problema, mas a solução está no código > abaixo. > > <?xml version="1.0" encoding="utf-8"?> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> > > <mx:Script> > <![CDATA[ > import mx.managers.DragManager; > import mx.controls.dataGridClasses.DataGridColumn; > import mx.events.DragEvent; > > import mx.collections.ArrayCollection; > > [Bindable] > private var campos:ArrayCollection = new ArrayCollection > ([ > {campo: "nome", tipo: "varchar 32"}, > {campo: "email", tipo: "varchar 32"}, > {campo: "telefone", tipo:"varchar 22"} > ]); > > [Bindable] > private var camposSel:ArrayCollection; > > // funcao p/ devolver o item para o primeiro datagrid quando > clicado > na imagem > public function devolveItem():void > { > campos.addItem({campo:camposS_dg.selectedItem.campo, > > tipo:camposS_dg.selectedItem.tipo}); > > camposS_dg.dataProvider.removeItemAt(camposS_dg.selectedIndex); > } > > private function preventDragHeader(event:DragEvent):void > { > var > items:Array=event.dragSource.dataForFormat("items") as Array; > for each (var item:Object in items) > { > if (item is DataGridColumn) > { > > event.currentTarget.hideDropFeedback(event); > event.preventDefault(); > } > } > } > > ]]> > </mx:Script> > > <mx:DataGrid id="camposD_dg" > width="240" height="140" > draggableColumns="false" sortableColumns="false" > dragMoveEnabled="true" allowMultipleSelection="true" > dragEnabled="true" dropEnabled="true" > dataProvider="{campos}" dragDrop="preventDragHeader(event)" > dragComplete="preventDragHeader(event)"> > <mx:columns> > <mx:DataGridColumn headerText="Campos disponíveis" > dataField="campo"/> > <mx:DataGridColumn headerText="Tipo" dataField="tipo" > width="80" > textAlign="right"/> > </mx:columns> > </mx:DataGrid> > > <mx:DataGrid id="camposS_dg" > width="256" height="140" > draggableColumns="false" sortableColumns="false" > dragMoveEnabled="true" allowMultipleSelection="true" > dragEnabled="true" dropEnabled="true" > dataProvider="{camposSel}" dragDrop="preventDragHeader(event)" > dragComplete="preventDragHeader(event)"> > <mx:columns> > <mx:DataGridColumn headerText="Campos selecionados" > dataField="campo"/> > <mx:DataGridColumn headerText="Tipo" dataField="tipo" > width="80" > textAlign="right"/> > <mx:DataGridColumn headerText="" width="16"> > <mx:itemRenderer> > <mx:Component> > <mx:LinkButton label="x" > click="outerDocument.devolveItem()"/> > </mx:Component> > </mx:itemRenderer> > </mx:DataGridColumn> > </mx:columns> > </mx:DataGrid> > > </mx:Application> > > []'s > Beck Novaes > > On 22 maio, 13:57, rramires <[EMAIL PROTECTED]> wrote: > > > To desenvolvendo um sistema e em uma das telas tem 2 datagrids, já > > está funcionando tudo do jeitinho que eu quero, porém se eu mudo a > > propriedade draggableColumns para false como eu preciso, ele parece > > ter um bug que permite que se eu clicar no titulo das colunas (Campos > > selecionados e Tipo) e arrastar para dentro do datagrid abre aquela > > jenelinha de erro do player dizendo: > > > Error: Cannot remove when current is beforeFirst or afterLast. > > at ::ListCollectionViewCursor/remove() > > at mx.controls.listClasses::ListBase/ > > mx.controls.listClasses:ListBase::dragCompleteHandler() > > at flash.events::EventDispatcher/ > > flash.events:EventDispatcher::dispatchEventFunction() > > at flash.events::EventDispatcher/dispatchEvent()[C:\Documents and > > Settings\acrorel\Local Settings\Temp\aslibc-26332\EventDispatcher.as: > > 184] > > at mx.core::UIComponent/dispatchEvent() > > at mx.managers.dragClasses::DragProxy/mouseUpHandler() > > > Ele também fica doidinho e permite eu arrastar o titulo das colunas de > > um datagrid para outro. > > > Alguam já teve problemas com isso ??? > > > Será um bug ou eu q to fazendo besteira ? > > > Código (tente arrastar o titulo do datagrid pra dentro dele ou do > > outro): > > > <?xml version="1.0" encoding="utf-8"?> > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > > layout="vertical"> > > > <mx:Script> > > <![CDATA[ > > import mx.collections.ArrayCollection; > > [Bindable] private var campos:ArrayCollection = > > new ArrayCollection([{campo: "nome", tipo: "varchar > > 32"}, > > {campo: "email", tipo: "varchar 32"}, {campo: > > "telefone", tipo: > > "varchar 22"}]); > > > [Bindable] private var camposSel:ArrayCollection; > > > // funcao p/ devolver o item para o primeiro > > datagrid quando > > clicado na imagem > > public function devolveItem():void > > { > > campos.addItem({campo: > > camposS_dg.selectedItem.campo, tipo: > > camposS_dg.selectedItem.tipo}); > > > camposS_dg.dataProvider.removeItemAt(camposS_dg.selectedIndex); > > } > > ]]> > > </mx:Script> > > > <mx:DataGrid id="camposD_dg" dataProvider="{campos}" > > draggableColumns="false" sortableColumns="false" > > dragMoveEnabled="true" allowMultipleSelection="true" > > dragEnabled="true" dropEnabled="true" > > width="240" height="140"> > > <mx:columns> > > <mx:DataGridColumn headerText="Campos disponíveis" > > dataField="campo"/> > > <mx:DataGridColumn headerText="Tipo" > > dataField="tipo" width="80" > > textAlign="right"/> > > </mx:columns> > > </mx:DataGrid> > > <mx:DataGrid id="camposS_dg" dataProvider="{camposSel}" > > draggableColumns="false" sortableColumns="false" > > dragMoveEnabled="true" allowMultipleSelection="true" > > dragEnabled="true" dropEnabled="true" > > width="256" height="140" > > > <mx:columns> > > <mx:DataGridColumn headerText="Campos selecionados" > > dataField="campo"/> > > <mx:DataGridColumn headerText="Tipo" > > dataField="tipo" width="80" > > textAlign="right"/> > > <mx:DataGridColumn headerText="" width="16"> > > <mx:itemRenderer> > > <mx:Component> > > <mx:Image > > click="parentDocument.devolveItem()" > > source="@Embed('assets/delete.png')" /> > > </mx:Component> > > </mx:itemRenderer> > > </mx:DataGridColumn> > > </mx:columns> > > </mx:DataGrid> > > > </mx:Application> --~--~---------~--~----~------------~-------~--~----~ Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para [email protected] Para sair da lista, envie um email em branco para [EMAIL PROTECTED] Mais opções estão disponíveis em http://groups.google.com/group/flexdev -~----------~----~----~----~------~----~------~--~---
