Flex bug when rendering AdvancedDataGrid with a small height
I couldn’t find an Adobe bug report for this, so I might go ahead and log one. I have a number of AdvancedDataGrid components in my interface, and I have encountered a run-time error when resizing the interface. It appears to happen whenever one of the AdvancedDataGrid components is resized down to a very small size - less than about 40 pixels height. The error message is:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mx.controls::AdvancedDataGridBaseEx/drawColumnBackground()
[C:\work\flex\dmv_automation\projects\datavisualisation\src \mx\controls\AdvancedDataGridBaseEx.as:3483]
For a workaround, I first tried to capture the ResizeEvent.RESIZE event on the AdvancedDataGrid and then test for the height of the grid; I set visible=false and includeInLayout = false whenever the grid was too small:
public function checkGridOnResize(evt:ResizeEvent):void { var grid:AdvancedDataGrid = AdvancedDataGrid(evt.currentTarget); grid.visible = (grid.height < 50 ? true: false); grid.includeInLayout = grid.visible; }
However, I was surprised to see that this didn’t work. The RTE was still being thrown, and the AdvancedDataGridBaseEx.drawColumnBackground() method was still being called, even though the grid was invisible. So I had to extend the AdvancedDataGrid class and catch the error in an overload of the drawColumnBackground method:
package com.symmetri.skins { import mx.controls.AdvancedDataGrid; import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn; import mx.core.UIComponent; public class ReportDataGrid extends AdvancedDataGrid { public function ReportDataGrid() { super(); } override protected function drawColumnBackground(s:Sprite, columnIndex:int, color:uint, column:AdvancedDataGridColumn):void { // this is done to handle a Flex bug // RTE thrown when rendering a grid smaller than about 40 pixels in height try { super.drawColumnBackground(s,columnIndex,color,column); } catch(e:Error) {} } } }
Not the ideal solution, but the best we can do at this point. When (if) I get a spare moment, I will post the bug report for Adobe.
