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>
>


Reply via email to