AdvancedDataGrid:如何判断当前可见的行数?

时间:2011-03-08 21:14:25

标签: flex actionscript-3 flex3 flex4 advanceddatagrid

在显示不同级别的分层集合时,是否有人知道如何查询ADG(或其行)以确定当前有多少行可见(即未折叠)?

换句话说,我想要一个函数告诉我在这个视图中可以看到7行 enter image description here

和1行可用 enter image description here

我认为这很简单但似乎无法在任何地方找到合适的关键字。

谢谢你!

2 个答案:

答案 0 :(得分:2)

您需要编写递归函数来迭代数据并使用AdvancedDataGrid的isItemOpen(item:Object):Boolean函数。像这样:

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;
}

此示例假设您的每个项都有一个名为children的属性,可以迭代。

注意:这将只返回打开的项目数 - 即使在第二个示例中,此函数也会返回0.如果要包含开放根,则必须单独考虑它们

答案 1 :(得分:1)

视图中的openNodes属性:IHierarchicalCollectionView似乎是我正在寻找的。将根节点传递给它似乎可以解决问题。我确信有更优雅的方式来写这个; - )

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
}

注意:我认为有趣的一点是openNodes返回开放节点列表,即使它们不可见,就像这些节点位于封闭节点内一样。