如何将AdvancedDataGrid的大小限制为具有可变行高的行

时间:2011-08-24 06:32:12

标签: flex actionscript advanceddatagrid

我尝试将AdvancedDataGrid的大小限制为其行。目前我使用variableRowHeight为true,并在运行时设置itemRenderer的高度。

因此每行都有不同的高度。但我发现计算网格高度背后的逻辑简单明了 - 测量第一行的高度,然后将其乘以行数。 如果我错了,请纠正我

我在这个问题上做了一些POC,发现在 calculateRowHeight 事件期间 - >它计算单独的行高,但在行的某处,它只是将rowCount与第一行的高度相乘。相反,它应该计算每一行,并应总结高度。

请建议一种克服这种情况的方法。

PS:我尝试过以下选项: 1. rowCount = arrayCollection.length 2. dataGrid.height = dataGrid.measureHeightOfItems(0,arrayCollection.length)+ dataGrid.headerHeight

4 个答案:

答案 0 :(得分:1)

您可以做的最好的事情是指定数据网格的高度以及其中每行的高度。整个变高的东西不一致。

答案 1 :(得分:0)

如果您发现问题出在此特定方法中,可能您可以尝试扩展AdvancedDataGrid并覆盖calculateRowHeight方法来执行此操作。

public class MyAdvancedDatagrid extends AdvancedDataGrid {

    override protected function calculateRowHeight(data:Object, hh:Number, skipVisible:Boolean = false):Number {
     //Your code here
    }

}

答案 2 :(得分:0)

高级数据网格采用与flex中所有列表相同的回收方法。它仅为屏幕上的可视数据创建项呈示器。发现不可见的每一行都没有为其创建项呈示器,因此项呈示器无法测量并报告网格的高度,因此无法获得可变行高设置为的网格的精确高度真实的,更多的数据,而不是适合屏幕。

如果要精确测量网格所需的高度,请为数据提供程序中的每一行创建一个项呈示器,验证并测量它。

答案 3 :(得分:0)

以下代码可用于扩展AdvancedDataGrid的measure overriden方法:

override protected function measure():void
{
    super.measure();
    if(this.dataProvider != null && this.dataProvider.length > 0)
    {
        this.measuredHeight = this.measureHeightOfItems(0, dataProvider.length);
    }
}

这将计算所有行的高度,并相应地设置datagrid高度。