对于分层数据,您必须使用遍历分层数据所有级别的游标。
var dp:IHierarchicalCollectionView = _dataGrid.hierarchicalCollectionView;
var cursor:IViewCursor= dp.createCursor();
while (!cursor.afterLast)
{
cursor.current[_dataField] = cb.selected;
cursor.moveNext();
}
但是,这仅适用于先前已打开的节点。因此,要么展开所有节点_dataGrid.expandAll()
(您可以在之后折叠它们,因为节点只需打开一次)或手动迭代您的分层数据:
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);
更新:回答你的第二个问题......
- 创建一个新
CheckBoxColumn
的扩展AdvancedDataGridColumn
. 您可以使用它来预配置您的headerRenderer
和itemRenderer
.
- 在您的自定义项目渲染器中,您可以像这样掌握您的列:
grid = AdvancedDataGrid(listData.owner);
column = grid.columns[listData.columnIndex] as CheckBoxColumn;
- 在标题渲染器中执行相同的操作。
- 每当您的一个项目渲染器中的 CheckBox 值发生更改时,都会通过您的列发送一个事件。就像是:
column.dispatchEvent(new Event("checkBoxValueChanged"));
- 您的标题渲染应该为“checkBoxValueChanged”事件(或您所称的任何名称)的列添加一个事件侦听器。每当触发该事件时,都会通过您的数据提供程序循环并相应地更新标头 CheckBox。
理论上应该可以。高温高压