Hi, if you are using ArrayCollection, have you tried you <DataGrid>.rowCount = <DataProvider>.length...
And when the <DataProvider> has things added to it, immediately do a <DataProvider>.refresh()... Percy --- In [email protected], "martyp...@..." <martyp...@...> wrote: > > > Hi All > > I'm trying to create a datagrid which will resize vertically to ensure > all the renderers are displayed in full. Additionally, > > * Renderers are of variable height > * Renderers can resize themselves > > Generally speaking, the flow of events is as follows : > > * One of the item renderers resizes itself (normally in response to a > user click etc) > * It dispatches a bubbling event which the parent datagrid picks up > * The DataGrid attempts to resize to ensure that all renderers remain > visible in full. > > I'm currently using this code within the datagrid to calculate the > height: > height = measureHeightOfItems(0, dataProvider.length ) + headerHeight; > > This appears to get an incorrect height. I've tried a number of > variations including callLater ( to ensure the resize has completed so > measure can work correctly), and overriding meausre() and calling > invalidateSize() / validateSize(), but neither works. > > Below are 3 classes which will illustrate the problem. Clicking the > button in the item renderers resizes the renderer. The grid should also > expand so that all of the 3 renderers are shown in their entirety. > > Any suggestions would be greatly appreciated. > > Regards > > Marty > > DataGridProblem.mxml (Application file) > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > layout="vertical" > xmlns:view="view.*"> > <mx:ArrayCollection id="dataProvider"> > <mx:String>Item A</mx:String> > <mx:String>Item B</mx:String> > <mx:String>Item C</mx:String> > </mx:ArrayCollection> > <view:TestDataGrid > id="dg" > dataProvider="{ dataProvider }" > width="400"> > <view:columns> > <mx:DataGridColumn dataField="text" /> > <mx:DataGridColumn itemRenderer="view.RendererButton" /> > </view:columns> > </view:TestDataGrid> > </mx:Application> > > view.TestDataGrid.as > package view > { > import flash.events.Event; > > import mx.controls.DataGrid; > import mx.core.ScrollPolicy; > > public class TestDataGrid extends DataGrid > { > public function TestDataGrid() > { > this.verticalScrollPolicy = ScrollPolicy.OFF; > this.variableRowHeight = true; > this.addEventListener( RendererButton.RENDERER_RESIZE , > onRendererResize ); > } > private function onRendererResize( event : Event ) : void > { > resizeDatagrid(); > } > private function resizeDatagrid():void > { > height = measureHeightOfItems(0, dataProvider.length ) + > headerHeight; > } > } > } > > view.RendererButton.mxml > <?xml version="1.0" encoding="utf-8"?> > <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"> > <mx:Button width="50" height="50" > click="onClick()" /> > > <mx:Script> > <![CDATA[ > > public static const RENDERER_RESIZE : String = > "resizeRenderer"; > private function onClick() : void > { > this.height += 20; > dispatchEvent( new Event( RENDERER_RESIZE , true > ) ); > } > ]]> > </mx:Script> > </mx:HBox> >

