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
-~----------~----~----~----~------~----~------~--~---

Responder a