我尝试将AdvancedDataGrid的大小限制为其行。目前我使用variableRowHeight为true,并在运行时设置itemRenderer的高度。
因此每行都有不同的高度。但我发现计算网格高度背后的逻辑简单明了 - 测量第一行的高度,然后将其乘以行数。 如果我错了,请纠正我
我在这个问题上做了一些POC,发现在 calculateRowHeight 事件期间 - >它计算单独的行高,但在行的某处,它只是将rowCount与第一行的高度相乘。相反,它应该计算每一行,并应总结高度。
请建议一种克服这种情况的方法。
PS:我尝试过以下选项: 1. rowCount = arrayCollection.length 2. dataGrid.height = dataGrid.measureHeightOfItems(0,arrayCollection.length)+ dataGrid.headerHeight
答案 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高度。