AdvancedDataGrid: как определить количество видимых строк? - PullRequest
3 голосов
/ 09 марта 2011

Кто-нибудь знает, как запросить ADG (или его строки), чтобы выяснить, сколько строк в настоящее время видно (то есть не свернуто) при отображении различных уровней иерархической коллекции?Мне нравится функция, которая сообщает мне, что в этом представлении видны 7 строк enter image description here

и в этом доступно 1 строка enter image description here

Я предполагаю, что это просто, но непохоже, где-нибудь найти правильное ключевое слово.

спасибо!

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Вам нужно написать рекурсивную функцию для итерации ваших данных и использовать isItemOpen (item: Object): Boolean функции AdvancedDataGrid. Примерно так:

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 голос
/ 09 марта 2011

Представленное свойство 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 возвращает список открытых узлов, даже если они не видны, как в случае таких узлов, живущих внутри закрытого узла.

...