■
データグリッドの初期化が遅いということで、ちょっと実験してました。具体的にどれほど遅いかを検証するAS2のソースは下記
- ソース1 時間取得用関数
getCurrentDateString = function():String{ var dt:Date = new Date(); var wkString:String = "" + dt.getFullYear() + "/"; wkString += dt.getMonth() + "/" wkString += dt.getDate() + " " wkString += dt.getHours() + ":" wkString += dt.getMinutes() + ":" wkString += dt.getSeconds() + "." wkString += dt.getMilliseconds() + ""; return wkString; } traceMessage= function(message:String):Void{ trace(getCurrentDateString()+" "+ message); }
- ソース2 データグリッド設定用ソース
import mx.controls.gridclasses.DataGridColumn; //Col1設定 var dgc:DataGridColumn; traceMessage("Start col1 Set"); dgc = new DataGridColumn("col1"); dgc.editable = false; dgc.headerText = "番号"; dgc.width = 90; grd1.addColumn(dgc); grd1.getColumnAt(0).setStyle("textAlign", "right"); //Col2設定 traceMessage("end col1 Set"); traceMessage("Start col2 Set"); dgc = new DataGridColumn("col2"); dgc.editable = true; dgc.headerText = "名称1"; dgc.width = 80; grd1.addColumn(dgc); traceMessage("end col2 Set"); //Col3設定 traceMessage("Start col3 Set"); dgc = new DataGridColumn("col2"); dgc.cellRenderer = "TestCellRenderer"; dgc.editable = false; dgc.headerText = "名称2"; dgc.width = 80; grd1.addColumn(dgc); traceMessage("end col3 Set"); dgc = nudefined; traceMessage("Start dataProvider Set"); //グリッドの値セット for (i=0; i<10; i++) { var iObject = new Object(); iObject.col1 = i+1; iObject.col2 = "TestData"; grd1.dataProvider.addItem(iObject); iObject = undefined; } traceMessage("End dataProvider Set"); grd1.editable = true;
これで、流すと、col1の設定に時間がかかっていることが分かります。
col1とcol2でどこが違うかといえば、
setStyle("textAlign", "right");
になります。右寄せです。
一方で、col3は、CellRendererを使用しています。CellRendererを使用しても処理時間がかかっていません。ここに"TestCellRenderer"のソースは載せませんが、行選択時はテキスト入力、行選択ではないときには、ダイナミックテキストを切り替えて表示するようなCellに設定してあります。
これを使うと、DataGridの設定が早くなるということが分かりました。
ちなみに、//Col3設定で、
dgc = new DataGridColumn("col2");
と書いてあるのはわざとです。