Copiar, Colar, Selecionar tudo em um DataGrid ou AdvancedDataGrid
Autor: Samuel Facchinello | Publicado: 2013-05-08T09:30:00-03:00


Olá pessoal, após muito tempo sumido, por falta de tempo. Voltei para mais um post.
Hoje vou mostrar algo que tive que implementar em um DataGrid ou AdvancedDataGrid.

Necessidade:
Poder copiar os registros selecionados para o clipboard, também poder adicionar registros vindos de uma tabela &nbsp;no excel, através do CTRL+C e CTRL+V.

Solução:
Implementar as funções de COPY e PASTE em um datagrid, podendo copiar os itens selecionados, e também adicionar novos itens (desde que estejam com a mesma quantidade de colunas).


Na prática:
   Error: Embedded data could not be displayed. 

Pode utilizar os atalhos do teclado também.
Você pode colar o texto abaixo em cima do grid:

 
 

  abc1
  cdf2
  ghi3
  jkl4
 

  mno5
  pqr6
  stu7
  vxz8
 


Código:
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;s:Application creationComplete="application1_creationCompleteHandler(event)"
               minHeight="600"
               minWidth="955"
               xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:ui="flash.ui.*"&gt;
    &lt;fx:Script&gt;
        &lt;![CDATA[
            import flash.desktop.Clipboard;
            import flash.desktop.ClipboardFormats;
            import flash.events.Event;
            
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;
            
            [Bindable]
            private var array:ArrayCollection = null;
            
            private function onEvent(evt:Event):void {
                switch (evt.type) {
                    case "paste":  {
                        var clipboadStr:String = Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT) as String;
                        
                        var arrayItem:Array = clipboadStr.split("\n");
                        
                        for each (var item:String in arrayItem) {
                            if (item.length&gt;0) {
                                var arrayValorItem:Array = item.split("\t");
                                var obj:Object = new Object();
                                var cont:int = 0;
                                
                                for each (var col1:Object in evt.currentTarget.columns) {
                                    obj[col1.dataField] = arrayValorItem[cont];
                                    cont++;
                                }
                                evt.currentTarget.dataProvider.addItem(obj);
                            }
                        }
                        break;
                    }
                    case "cut":  {
                        break;
                    }
                    case "copy":  {
                        if (evt.currentTarget.selectedItems.length&gt;0) {
                            var str:String = "";
                            
                            for each (var itemObj:Object in evt.currentTarget.selectedItems) {
                                for each (var col:Object in evt.currentTarget.columns) {
                                    str += itemObj[col.dataField]+"\t";
                                }
                                str += "\n";
                            }
                            System.setClipboard(str);
                        }
                        break;
                    }
                    case "selectAll":  {
                        var indexArr:Array = [];
                        
                        for (var i:uint = 0; i&lt;evt.currentTarget.dataProvider.length; i++) {
                            indexArr.push(i);
                        }
                        evt.currentTarget.selectedIndices = indexArr;
                        break;
                    }
                    default:  {
                        break;
                    }
                }
            }
            
            private function menuSelect(evt:ContextMenuEvent):void {
                evt.currentTarget.contextMenu.hideBuiltInItems();
            }
            
            protected function application1_creationCompleteHandler(event:FlexEvent):void {
                array = new ArrayCollection();
                
                var obj:Object = new Object();
                obj.coluna1 = "asd1";
                obj.coluna2 = "asd2";
                obj.coluna3 = "asd3";
                obj.coluna4 = "asd4";
                array.addItem(obj);
                
                obj = new Object();
                obj.coluna1 = "qwe1";
                obj.coluna2 = "qwe2";
                obj.coluna3 = "qwe3";
                obj.coluna4 = "qwe4";
                array.addItem(obj);
                
                obj = new Object();
                obj.coluna1 = "zxc1";
                obj.coluna2 = "zxc2";
                obj.coluna3 = "zxc3";
                obj.coluna4 = "zxc4";
                array.addItem(obj);
            
            }
        ]]&gt;
    &lt;/fx:Script&gt;

    &lt;fx:Declarations&gt;
        &lt;!-- Place non-visual elements (e.g., services, value objects) here --&gt;
    &lt;/fx:Declarations&gt;

    &lt;mx:VBox&gt;
        &lt;mx:DataGrid id="dgMain"
                     width="100%"
                     height="100%"
                     allowMultipleSelection="true"
                     copy="onEvent(event)"
                     cut="onEvent(event)"
                     dataProvider="{array}"
                     paste="onEvent(event)"
                     selectAll="onEvent(event)"&gt;
            &lt;mx:contextMenu&gt;
                &lt;!-- contextMenu: Habilita as opções com o botão direito do mouse --&gt;
                &lt;ui:ContextMenu clipboardMenu="true"
                                menuSelect="menuSelect(event);"&gt;
                    &lt;ui:clipboardItems&gt;
                        &lt;ui:ContextMenuClipboardItems copy="true"
                                                      cut="false"
                                                      paste="true"
                                                      selectAll="true"/&gt;
                    &lt;/ui:clipboardItems&gt;
                &lt;/ui:ContextMenu&gt;
            &lt;/mx:contextMenu&gt;

            &lt;mx:columns&gt;
                &lt;mx:DataGridColumn dataField="coluna1"
                                   headerText="Coluna 1"/&gt;

                &lt;mx:DataGridColumn dataField="coluna2"
                                   headerText="Coluna 2"/&gt;

                &lt;mx:DataGridColumn dataField="coluna3"
                                   headerText="Coluna 3"/&gt;

                &lt;mx:DataGridColumn dataField="coluna4"
                                   headerText="Coluna 4"/&gt;
            &lt;/mx:columns&gt;
        &lt;/mx:DataGrid&gt;
    &lt;/mx:VBox&gt;
&lt;/s:Application&gt;


Bom pessoal, por hoje é isso, espero que tenham gostado.

Comentem, divulguem, curtam.