AdvancedDataGrid hell: данные о группировании строк - PullRequest
0 голосов
/ 21 января 2010

Мне нужна иерархическая сетка, которая показывает данные в столбцах для родительских строк, а также дочерних строк.

- a parent | 1234 | data | data |
   a child | 2222 | data | data |
   a child |  212 | data | data |

Я пытался заставить ADG работать, но по умолчанию в нем есть все столбцы, кроме столбца группировки, пустого для родительских строк. Я думаю, что я мог бы использовать средства визуализации элементов для передачи данных туда.

Моя проблема с блокировкой заключается в том, что моя группировка не работает вообще. Я вижу данные, когда я устанавливаю dataProvider = MyArrayCollection, но

<mx:GroupingCollection id="GroupingCollection" 
           source="{this.specificReportData.gridData}">
    <mx:Grouping label="childName">
        <mx:GroupingField name="parentName" />
    </mx:Grouping>
</mx:GroupingCollection>

не не работает: данные не отображаются. Я пытался иметь явный столбец "дочернее имя", а не один. Я пытался обернуть его в HierarchicalCollectionView, но это тоже не работает. Я прошел основные уроки группирования, и мой код и данные выглядят так, как будто они соответствуют шаблону.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 23 января 2010

Ответ заключается в том, что AdvancedDataGrid не создан, чтобы делать то, что я хочу.

Отлично подходит для группировки данных с общими значениями; это плохо для группировки данных, где фактические родительские элементы существуют в виде самих строк. Я также требую, чтобы сортировка и фильтрация применялись только к родительским элементам (на основе их собственных данных); любой видимый родитель может показать своих детей, а дети никогда не сортируют.

Мое двухэтапное решение - сначала обработать данные, перебрав их и создав массив родительских элементов и добавив к ним свойство массива children, которое содержит дочерние элементы. Обратите внимание, что это массивы ссылок; Я не копирую фактические данные.

Затем я применяю любую сортировку и фильтрацию к родительскому массиву (возможно, с помощью оболочки ArrayCollection) и перебираю родителей, копируя видимых (и их дочерних элементов, если родитель отмечен expanded) в массив отображения , Моя сетка использует массив отображения как простой (например, не сгруппированный) dataProvider. Пользовательское средство визуализации элементов будет создавать отступ для дочерних элементов и изменять свойство expanded родительских элементов, что приведет к регенерации массива отображения.

Это не только более простое и интуитивно понятное решение, оно не требует от читателя или сопровождающего, чтобы понять особенности ADG (мой девиз: «Нет умного кода»).

Спасибо, Томас, за попытку. Я даю вашему ответу +1, хотя я не помечаю его как ответ.

Приветствия

1 голос
/ 21 января 2010

Вы не должны включать родителей в свой источник данных. Вам нужен источник данных, подобный этому:

   a child | 2222 | data | data | parentid | parentname
   a child |  212 | data | data | parentid | parentname

И установите для поля группировки значение parentid или parentname. Группировка создает иерархию из плоского источника данных и, таким образом, создает для вас родителей.

...