DataGridでテーブルの結果をデータとして表示したいときに、

[AS]
stmt.text = “SELECT * FROM ……”;
stmt.execute();
var result:SQLResult = stmt.getResult();
datagrid.dataProvider = new ArrayCollection(result.data);
[/AS]

のようにして、データを取得してArrayCollectionとして設定すればいい。

しかし、これではデータが大きかろうが、小さかろうがデータをすべて事前に作成する必要がある。
もし、これが20行しか表示されずに、そのままそのページを閉じられたとしてもだ。

これは何とも非効率だ。
そこで、必要なデータを、必要な時に作成するようにしたいと思っていろいろと調べていたが、
一番よいやり方は、DataProviderに設定できるICollectionViewのインターフェースをもったクラスを自作するのが一番だろうということになり、このクラスを自作することにした。

まだ、完全にはできていないものの、このクラスを自作しながらレポートしていく。

必要なサンプルクラスをさがす

dataProviderに設定するにはICollecitonViewのインターフェースをもったクラスだから、
この必要メソッドを作成していけば、いいわけだが、やみくもに作ってもしょうがない。

そこで、既存の実装でよいサンプルを探す。
やはり、このサンプルとして一番いいのは、ArrayCollecitonだろう。
データ自体がArrayなので、内容も把握しやすい。

そこでArrayCollecitonというクラスを見てみると、ほんの150行程度で実装が終わっている。
ようはやっていることは

(今回関係ある部分のみしか記述していません)
[AS]
public class ArrayCollection extends ListCollectionView{

public function set source(s:Array):void{
list = new ArrayList(s);
}
}
[/AS]
というように、listプロパティに、IListの実装としてArrayListを設定しているListCollectionViewということがいえる。

したがって、今回自作するクラスもこのような形として実装すればなんとかなりそうだ。

実装するクラス

前述の通り、今回実装するクラスは

  • TableCollecitonView
  • TableList

とする。

ちょうど、TableCollecitonViewがArrayCollectionを参考にし、TableListがArrayListを参考に実装すればよいというわけだ。

では、これらの実装を次回からしていくことにする。

参考までに、ArrayListというクラス、publicなクラスだが、@privateとなっていてドキュメントからは表示されないようになっている。

関連記事

Leave a Reply

Spam protection by WP Captcha-Free

ソフトウェア&ライブラリ



ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
カレンダー
2009年6月
« 5月   7月 »
1234567
891011121314
15161718192021
22232425262728
2930  

カスタム検索
RSS
Add to Google
にほんブログ村 IT技術ブログへ