我已经获得了一个复选框标题渲染器,可以很好地处理平面DP,但是a 分层集合视图是另一个故事。点击,我希望它选择全部 给定列中的复选框。这是我的代码:
var dp:HierarchicalCollectionView = _dataGrid.dataProvider as HierarchicalCollectionView; var testDp:GroupingCollection = dp.source as GroupingCollection; var rawDp:ArrayCollection = testDp.source as ArrayCollection;
for(var i:int = 0; i< rawDp.length; i ++){ rawDp [i] [_ dataField] = cb.selected; }
它选择第二级数据的所有复选框,但不选择顶部 数据水平。我在这里错过了什么?我似乎无法找到它。
非常感谢任何提示。谢谢。
答案 0 :(得分:1)
对于分层数据,您必须使用一个游标来迭代所有级别的分层数据。
var dp:IHierarchicalCollectionView = _dataGrid.hierarchicalCollectionView;
var cursor:IViewCursor= dp.createCursor();
while (!cursor.afterLast)
{
cursor.current[_dataField] = cb.selected;
cursor.moveNext();
}
Howerver,这仅适用于先前已打开的节点。因此,要么使用_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;
column.dispatchEvent(new Event("checkBoxValueChanged"));
理论上应该有效。 HTH