— 2010/3/26追記 ——–
とおりすがりのFlexプログラマさんが、コメントしてくれたように、
この記述はある部分ではあっておりますが、ある部分では間違っていますね。
私自身、既存のクラスを用いずにいろいろと自作していたので、このような問題にハマっていたようです。
勉強になりました・・・・
————————————————————————————————————-

DataGridではDataProviderで指定されているオブジェクトの中身が変わったときに、
自動的には表示が変わるということがない。

したがって、データが変わったことをDataGridのオブジェクトに通知しなければならない。

この方法として大きく分けて2つある。

1)DataProviderで指定したデータのオブジェクト自体を変更してしまう。

おもに、管理しているデータが少ない、または、ちょっとした動作を確認したいための捨てコードなどのために、
私はこの方法を使う。
ようは、dataGrid.dataProviderを再度設定してしまうわけだ。

2)Collectionからイベントを発行し、データが変わったことを通知する。

こちらが、正当なやり方だろう。
DataGridは、CollectionEventの通知を受けて、画面の再描写を行う。

以下の例では、たとえば、list(ArrayCollection)をDataGridのdataProviderに指定しており、
何らかのユーザの処理で、データを書き換えることを想定したサンプルである。

var obj:Object = list.getItemAt(2);
obj.title = "this is test";
var evt:CollectionEvent = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
evt.kind = CollectionEventKind.REPLACE;
evt.location = 2;
list.dispatchEvent(evt);

リファレンス:
CollectionEvent
CollectionEventKind

とこのようにすることで、データの一部が変わったことを通知できる。
また、これ以外にも、データが追加されたこと、データが削除されたことや、フィルタがかかったことなどを、
kindプロパティを通じて通知できる。

ただ、変更のたびに、変更をするソースがこのようなイベントを発行する処理を記述するのは、本来あるべきではないと思うので、
このようなイベントは、データ(アイテム)自身が投げるか、または、ICollectionView自体が投げるべきだと思う。

私は、データの変更通知と、データ自体の変更のタイミングを自分の都合のよいように制御できるので、ICollectionViewを実装したクラスを自分で作ることにしている。
データの変更通知とデータ自体の変更が別がいいのは、たとえば、まとめて100件が連続して変更される場合、1件1件で変更通知をせずに、
最後にまとめて通知を1回するということも可能になるのだ。

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

One Response to “flex:DataGridのコレクション内のデータを変更した際に、表示も更新する”

  • >DataGridではDataProviderで指定されているオブジェクトの中身が変わったときに、
    自動的には表示が変わるということがない。

    正確にはCollectionでイベントを監視できないプリミティブなObjectクラスを配列の一要素として使用している場合ですね。
    [Bindable]メタデータタグが付加されたクラスなら上記に書かれている処理をArrayCollectionが行ってくれるので、ListBaseのクラスは自動で変更を感知することが出来ます。

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2010年3月
« 2月   4月 »
1234567
891011121314
15161718192021
22232425262728
293031  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ