そうだね、あれも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);
[/actionscript3]
[actionscript3]
// (2) キーの判定を行う
function keydownDataGrid01(e:KeyboardEvent):void {
if (e.keyCode == 67 && e.shiftKey) {
this.DataCopy();
}
}
[/actionscript3]
[actionscript3][/actionscript3]
// データのコピー
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」キー+文字キーなどを入力すると、その文字で始まる行にフォーカスが移動します。
今回のサンプルは先頭がすべて数字ですので、この問題は発生しませんが、データによってはこの動作が行われる可能性があります。
もしコピーを行う場合は、無難にボタンから実行する方がわかりやすいかもしれません。