AdobeFlex3のDataGridからデータをコピーする方法

そういえば、SSLってなんの略だったかと思い、wikipediaから検索したところ、最上位に「湘南新宿ライン」が表示されていました。
そうだね、あれもSSLだね。
どうも、エンジニアアイカワです。
今回は、Adobe FlexのDataGridについてです。
DataGridは、データ一覧を表示するコントロールです。
その他、表示されたデータを修正する等の多種機能を持っており、それらはプロパティ一つで設定することができます。
ただし、データのコピーができません。
見た目がExcelに似ているため、選択したデータをそのままコピーできればとよく思います。
ということで、データのコピーが可能なDataGridを作成しました。
DataGridのデモ
デモはこちら。http://www.risewill.co.jp/lab/blog-demo/flex/20150227/01/
データのコピーは、以下の手順で行います。
1.コピーするデータを選択する。
2.「Shift」キー+「C」キーを押す。
3.Excelなどに貼り付ける。
サンプルソース
以下がソースです。// (1) キーイベントを取得する this.DataGrid01.addEventListener(KeyboardEvent.KEY_DOWN,keydownDataGrid01);
// (2) キーの判定を行う function keydownDataGrid01(e:KeyboardEvent):void { if (e.keyCode == 67 && e.shiftKey) { this.DataCopy(); } }
// データのコピー function DataCopy():void{ // (3) 選択したデータを取得する var data_array:Array = this.DataGrid01.selectedItems; data_array.sortOn("No"); if (data_array.length > 0){ // (4) Excel用にデータを加工する var string_data:String = ""; for ( var i:int = 0 ; data_array.length > i ; i++ ){ string_data += data_array[i].column1 + "\t"; string_data += data_array[i].column2 + "\t"; string_data += data_array[i].column3 + "\t"; string_data += data_array[i].column4 + "\t"; string_data += data_array[i].column5 + "\t"; string_data += data_array[i].column6; string_data += "\n"; } // (5) クリップボードに格納する System.setClipboard(string_data); } }
処理の詳細は、以下の通りです。
(1) キーイベントを取得する
DataGrid01にKEY_DOWNイベントのリスナーを登録して、コピーをするためのキーイベントを取得します。
(2) キーの判定を行う
今回は「Shift」キー+「C」キーとしました。
「Shift」キー+「C」キーとした理由は、下を参照してください。
(3) 選択したデータを取得する
選択したデータは、DataGridオブジェクトのselectedItemsプロパティで取得できます。
※ただし、取得した配列は選択した順に格納されているため、表示されているものと順序が異なります。
今回は表示されている順序(見た目通りの順番)と合わせるため、選択したデータを取得後にNo列でソートしています。
(4) Excel用にデータを加工する
Excelに貼り付けるために、各値をタブ文字で区切ります。
各列の値を抽出し、タブ区切りした文字列を作成します。
(5) クリップボードに格納する
クリップボードに格納する際は、以下のメソッドを使用します。
文字列を渡してあげればOKです。
System.setClipboard()
問題点
これで、コピーができるのですが、問題点も多々あります。・キーイベントが「Ctrl」キー+「C」キーではないのは、なぜ?
「Ctrl」キー+「C」キーでは、キーイベントが発行されないようです。
使用しているWebブラウザで、ショートカットキーが設定されている場合は、そちらが優先されキーイベントが発生しないようです。
・「Shift」キーにも問題あり?
「Shift」キー+文字キーなどを入力すると、その文字で始まる行にフォーカスが移動します。
今回のサンプルは先頭がすべて数字ですので、この問題は発生しませんが、データによってはこの動作が行われる可能性があります。
もしコピーを行う場合は、無難にボタンから実行する方がわかりやすいかもしれません。

株式会社ライズウィル
〒103-0013
東京都中央区日本橋人形町2-15-1
フジタ人形町ビル7F
TEL : 03-4590-3200
FAX : 03-4590-3201
E-Mail : info@risewill.co.jp
URL : https://www.risewill.co.jp