Ну ..
После выходных, чтобы сегодня хорошенько встряхнуть голову и пару свежих глаз, я нашел решение для «легкой» части моего вопроса.
Установить напрямую dataProvider в AdvancedDataGrid намного проще, чем я думал; вам просто нужно привести ArrayCollection в качестве HierarchicalData. Честно говоря, я пробовал это раньше, но неправильно произносил Hierarchical .. facepalm .
Так или иначе, advancedDataGridProblem.as должен быть изменен на:
import mx.collections.ArrayCollection;
import mx.collections.HierarchicalData;
public var dataProvider:ArrayCollection = new ArrayCollection([{label:"item1"},
{label:"item2", children:[{label:"subItem1"},{label:"subItem2"},
{label:"subItem3"}]},
{label:"item3"}]);
public function init():void{
//using callLater to ensure that the grid has been created before setting DP
this.callLater(setDataProvider,[dataProvider]);
}
public function setDataProvider(list:ArrayCollection):void{
advDG.dataProvider = new HierarchicalData(list);
}
Объявление dataProvider в mxml также можно удалить:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script source="advancedDataGridProblem.as"/>
<mx:AdvancedDataGrid id="advDG" width="100%">
<mx:columns>
<mx:AdvancedDataGridColumn headerText="What the heck?"/>
<mx:AdvancedDataGridColumn headerText="Label" dataField="label"/>
<mx:AdvancedDataGridColumn headerText="Column 2"/>
<mx:AdvancedDataGridColumn headerText="Column 3"/>
</mx:columns>
</mx:AdvancedDataGrid>
</mx:Application>
Запустив этот код, вы по-прежнему можете видеть значки раскрытия в неправильном столбце, но по крайней мере «хакерское» решение по установке dataProvider сетки в mxml. Это также позволяет правильно проверить и отобразить сетку. Установка сетки dataProvider позволяет правильно проверить отображение, где, очевидно, установка его источника иерархических данных dataProvider не вызывает те же методы проверки, требуя от пользователя изменить размер сетки или программист каким-либо образом вызвать проверку (чего я на всю жизнь не мог делает).
Я буду держать вас в курсе вопроса о значке раскрытия. В то же время, я ожидаю, что блокировка первого столбца и использование его исключительно для этих значков будет хорошо работать в моем приложении. Я даже могу превратить этот «недостаток» в «особенность»: P
Ура!
[EDIT]
Еще один метод, который обеспечивает еще более простую реализацию и меньшую бизнес-логику при использовании связанных данных, такой:
advancedDataGridProblem.as:
import mx.collections.ArrayCollection;
import mx.collections.HierarchicalData;
public var dataProvider:ArrayCollection = new ArrayCollection([{label:"item1"},
{label:"item2", children:[{label:"subItem1"},{label:"subItem2"},
{label:"subItem3"}]},
{label:"item3"}]);
mxml:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script source="advancedDataGridProblem.as"/>
<mx:AdvancedDataGrid id="advDG" width="100%">
<mx:columns>
<mx:AdvancedDataGridColumn headerText="What the heck?"/>
<mx:AdvancedDataGridColumn headerText="Label" dataField="label"/>
<mx:AdvancedDataGridColumn headerText="Column 2"/>
<mx:AdvancedDataGridColumn headerText="Column 3"/>
</mx:columns>
<mx:dataProvider>
<mx:HierarchicalData source="{dataProvider}"/>
</mx:dataProvider>
</mx:AdvancedDataGrid>
</mx:Application>
Этот подход обходит возможные проблемы, связанные с необходимостью вручную аннулировать и проверять список сетки, список отображения и т. Д. После установки dataProvider сетки в ActionScript. Мое небольшое замечание, касающееся использования этого метода, заключается в том, что, поскольку это создает одностороннюю привязку в flex 3, я не уверен, смогу ли я использовать методы объекта HierarchicalData для изменения связанной ArrayCollection. Тем не менее, я не искал в источнике HierarchicalData или AdvancedDataGrid, но я не сомневаюсь, что они действительно изменяют источник напрямую. Я опубликую результаты по мере их поступления.
Ура!