Does anyone know how to query an ADG (or its rows) to figure out how many rows are currently visible (i.e. not collapsed) when displaying different levels of a hierarchical collection?
In other words I'd like a function that tells me that 7 lines are visible in this view
开发者_StackOverflow中文版and 1 line is available in this one
I assume this is simple but can't seem to find the right keyword anywhere.
thank you!
You'll need to write a recursive function to iterate through your data and make use of the AdvancedDataGrid's isItemOpen(item:Object):Boolean function. Something like this:
countOpenItems(root : Object) : int {
var openCount : int = 0;
if (grid.isItemOpen(item)) {
openCount++;
for each (var child : Object in item.children) {
openCount += countOpenItems(child);
}
}
return openCount;
}
This example assumes each of your items has a property called children that can be iterated over.
note: This will return only the number of open items -- even in your second example this function will return 0. If you want to include open roots you'll have to account for them separately.
the openNodes property in view:IHierarchicalCollectionView seems to be what I was looking for. Passing the root node to this seems to do the trick. I'm sure there's a more elegant way to write this ;-)
function recurse(o:Object):uint
{
// grab the general list, for commodity
var view:IHierarchicalCollectionView = adg.dataProvider as IHierarchicalCollectionView;
// I count as 1 if we're recursing through me
var total:uint = 1;
// check if I'm open
for each (var e:Object in view.openNodes)
{
if (e == o)
{
// if so I need to add my children and their families
for each (var c:Object in o.children)
total += recurse(c);
}
}
// if not I'm done, just counting myself
return total
}
Note: one thing I thought was interesting is that openNodes returns the list of open nodes, even if they are not visible like in the case of such nodes living inside a closed node.
精彩评论