我正在尝试创建一个数据网格,它将垂直调整大小以确保完整显示所有渲染器。此外,
一般来说,事件的流程如下:
我目前在数据网格中使用此代码来计算高度:
height = measureHeightOfItems(0, dataProvider.length ) + headerHeight;
这似乎得到了不正确的高度。我尝试了许多变体,包括 callLater(以确保调整大小已完成,以便测量可以正常工作),以及覆盖 meausre() 和调用 invalidateSize()/validateSize(),但都不起作用。
下面是 3 个类,它们将说明问题。单击项目渲染器中的按钮可调整渲染器的大小。网格还应展开,以便完整显示所有 3 个渲染器。
任何建议将不胜感激。
问候
马蒂
DataGridProblem.mxml(应用程序文件)
<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>
最佳答案
您可以使用以下代码通过 AdvancedDataGrid 实现此目标。如果删除 this.headerHeight,它也适用于 List,这让我相信它应该适用于常规的旧 DataGrid。
override protected function measure():void
{
super.measure();
if ( this.dataProvider )
{
var newHeight : int = measureHeightOfItems( 0, this.dataProvider.length ) + this.headerHeight;
this.minHeight = newHeight;
this.height = newHeight;
}
}
关于apache-flex - Flex - 自动调整数据网格大小的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/609964/