![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2010
Сообщений: 177
|
Здравствуйте! Помогите, пожалуйста, разобраться в проблеме!
Есть приложение Flex SDK 3.5, есть экземпляр mx:TitleWindow добавляемый на сцену методом PopUpManager.createPopUp, в этом TitleWindow есть экземпляр mx:AdvancedDataGrid. По событию creationComplete TitleWindow, программно задаётся структура AdvancedDataGrid, десериализируется объект Array и задаётся в качестве источника данных для этого AdvancedDataGrid. Проблема: при выполнении этой процедуры, часто появляется runtime-ошибка: TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at mx.controls::AdvancedDataGrid/findHeaderRenderer()[C:\work\flex\dmv_automation\projects\datavisualisation\src\mx\controls\AdvancedDataGrid.as:1352] at mx.controls::AdvancedDataGrid/mouseEventToItemRenderer()[C:\work\flex\dmv_automation\projects\datavisualisation\src\mx\controls\AdvancedDataGrid.as:1317] at mx.controls.listClasses::AdvancedListBase/mouseMoveHandler()[C:\work\flex\dmv_automation\projects\datavisualisation\src\mx\controls\listClasses\AdvancedListBase.as:8085] В чём может быть проблема? Может десериализация источника данных занимает много времени и в момент инициализации AdvancedDataGrid объект dataProvider ещё не готов? Как отследить момент готовности объекта sourse? Что вообще происходит? Вот код всего компонента: <?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" creationPolicy="all" creationComplete="componentCompleteHandler()" layout="absolute" width="100%" height="100%" showCloseButton="true" close="mx.core.Application.application.appEventHandler(event);"> <mx:Script> <![CDATA[ import mx.core.Application; import mx.utils.Base64Decoder; import mx.utils.Base64Encoder; import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnGroup; import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn; protected function componentCompleteHandler():void{ var baDec:Base64Decoder = new Base64Decoder(); baDec.decode(Application.application.DataGrid1.selectedItem.STOLBEC); var ba2:ByteArray = baDec.toByteArray(); ba2.position = 0; var newAr:Array = ba2.readObject(); var column1:AdvancedDataGridColumn = new AdvancedDataGridColumn(); column1.dataField = "par1"; var column2:AdvancedDataGridColumn = new AdvancedDataGridColumn(); column2.dataField = "par2"; var groupColumnviewDG:AdvancedDataGridColumnGroup = new AdvancedDataGridColumnGroup(); groupColumnviewDG.dataField = "group"; for each(var element:Object in newAr[0].group){ var newDGColumn:AdvancedDataGridColumnGroup = new AdvancedDataGridColumnGroup(); newDGColumn.dataField = "e"+element.ID; var newGroupColumn1:AdvancedDataGridColumn = new AdvancedDataGridColumn(); newGroupColumn1.dataField = "p1"; newGroupColumn1.itemRenderer = new ClassFactory(ItemRend1); var newGroupColumn2:AdvancedDataGridColumn = new AdvancedDataGridColumn(); newGroupColumn2.dataField = "p2"; var newGroupColumn3:AdvancedDataGridColumn = new AdvancedDataGridColumn(); newGroupColumn3.itemRenderer = new ClassFactory(ItemRend2); newGroupColumn3.dataField = "p1"; newDGColumn.children.push(newGroupColumn1, newGroupColumn2, newGroupColumn3); groupColumnviewDG.children.push(newDGColumn); } viewDG.groupedColumns = new Array(column1, column2, groupColumnviewDG); viewDG.dataProvider = newAr; } ]]> </mx:Script> <mx:AdvancedDataGrid id="viewDG" width="{Application.application.stage.width-40}" height="{Application.application.stage.height-60}" lockedColumnCount="2" horizontalScrollPolicy="auto" headerWordWrap="true" variableRowHeight="true" wordWrap="true"/> </mx:TitleWindow> |
![]() |
Часовой пояс GMT +4, время: 15:50. |
|
|
« Предыдущая тема | Следующая тема » |
|
|