階層データの場合、階層データのすべてのレベルを反復処理するカーソルを使用する必要があります。
var dp:IHierarchicalCollectionView = _dataGrid.hierarchicalCollectionView;
var cursor:IViewCursor= dp.createCursor();
while (!cursor.afterLast)
{
cursor.current[_dataField] = cb.selected;
cursor.moveNext();
}
ただし、これは以前に開かれたノードでのみ機能します。したがって、すべてのノードを展開する_dataGrid.expandAll()
(ノードは 1 回だけ開く必要があるため、後で折りたたむことができます) か、階層データを手動で繰り返します。
function setCheckBoxValue(children:ArrayCollection, value:Boolean):void
{
for each (var child:Object in children)
{
if (child.hasOwnProperty("children") && child["children"])
setCheckBoxValue(child["children"], value);
child[_dataField] = value;
}
}
var myDataProvider:HierarchicalData = /* your data provider */;
// Call it like this...
setCheckBoxValue(myDataProvider.source, cb.selected);
更新:2番目の質問に答えるには...
CheckBoxColumn
拡張する新しいを作成しますAdvancedDataGridColumn
。headerRenderer
これを使用して、およびを事前設定できますitemRenderer
。
- カスタム アイテム レンダラーでは、次のように列を取得します。
grid = AdvancedDataGrid(listData.owner);
column = grid.columns[listData.columnIndex] as CheckBoxColumn;
- ヘッダー レンダラーで同じことを行います。
- いずれかの項目レンダラーの CheckBox 値が変更されるたびに、列を介してイベントが送出されます。何かのようなもの:
column.dispatchEvent(new Event("checkBoxValueChanged"));
- ヘッダー レンダーは、「checkBoxValueChanged」イベント (または任意の名前) の列にイベント リスナーを追加する必要があります。そのイベントが発生するたびに、データ プロバイダーをループし、それに応じてヘッダーの CheckBox を更新します。
理論的にはうまくいくはずです。HTH