datagrid measureHeightOfItems

weibaq 2010-02-01 05:54:53
我是把datagrid放入一个canvas中, datagrid的scrollbar 设成off, 用canvas的scrollbar,
在取得数据后动态计算datagrid的高度,用的是measureHeightOfItems方法,
datagrid.height=datagrid.measureHeightOfItems(0, dataprovider.length) + datagrid.headerHeight

但是我发现我的计算结果每次都很随机,有时候不能把数据完全显示出来
有没有人遇到过这个问题,或者有其他的解决方法也行

谢谢
...全文
206 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT牛气冲天 2012-01-31
  • 打赏
  • 举报
回复
我也遇到这样的问题。楼主问题解决了帮忙发出来,让大家也少走弯路。谢谢。发我邮箱也可以,我比较急切qiyang_2006@126.com.
weibaq 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xuetao121 的回复:]
也可以给你个提示。
在mx.core.UIComponent下面有个方法invalidateProperties();
用来标记组件,你在组件某个需要标记的地方使用就可以。
同时你覆盖commitProperties()这个方法。在你组件加载完毕后调用
override protected function commitProperties():void
{
    super.commitProperties();
    //这里写你组件加载完毕后需要调用的方法。或者需要做的事
}
呵呵,说不明白,你自己多试验下吧。代码多我就不贴了
[/Quote]


谢谢,我玩一玩
xuetao121 2010-02-03
  • 打赏
  • 举报
回复
也可以给你个提示。
在mx.core.UIComponent下面有个方法invalidateProperties();
用来标记组件,你在组件某个需要标记的地方使用就可以。
同时你覆盖commitProperties()这个方法。在你组件加载完毕后调用
override protected function commitProperties():void
{
super.commitProperties();
//这里写你组件加载完毕后需要调用的方法。或者需要做的事
}
呵呵,说不明白,你自己多试验下吧。代码多我就不贴了
herowach 2010-02-02
  • 打赏
  • 举报
回复
估计跟你调用的时间有关系,当你调用的时候,renderer中的updateDisplayList还没执行完成
syeia 2010-02-02
  • 打赏
  • 举报
回复
所以 开始我就说, 等数据加载完成后,在调用这个东西.

比如你 ArrayCollection 来封装数据,并绑定.

在你再次改变ArrayCollection 中的值完成后,调用这个方法.肯定没有问题.
weibaq 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 syeia 的回复:]
哪你就在 datagrid 的  creationComplete  调用
datagrid.height=datagrid.measureHeightOfItems(0, dataprovider.length) + datagrid.headerHeight

这时数据已经完成

试试/
[/Quote]

creationComplete 只在第一次load完成时触发,所以以后若再次在本页面检索数据后并不触发,不过你也提醒我用了updateComplete这个event,问题算是基本解决了,算出的height也对了。
只不过updateComplete在
commitProperties(), measure(), updateDisplayList()这几个方法后都调用,比较烦

谢谢阿
syeia 2010-02-02
  • 打赏
  • 举报
回复
哪你就在 datagrid 的 creationComplete 调用
datagrid.height=datagrid.measureHeightOfItems(0, dataprovider.length) + datagrid.headerHeight

这时数据已经完成

试试/
weibaq 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 herowach 的回复:]
估计跟你调用的时间有关系,当你调用的时候,renderer中的updateDisplayList还没执行完成
[/Quote]

这个倒有可能,因为我debug时 measureHeight 一直是22,

我还是对flex的机制理解得不好, 那herowach 有没有方法确定updateDisplayList 已经执行完了

谢谢
weibaq 2010-02-01
  • 打赏
  • 举报
回复
那按你说的 计算出来的height只与dataprovider有关系

可是我在调试的时候发现两次的dataprovider 中具体数据完全相同
计算出来的结果却是不一样的 很不解阿
syeia 2010-02-01
  • 打赏
  • 举报
回复
datagrid.height=datagrid.measureHeightOfItems(0, dataprovider.length) + datagrid.headerHeight
这个看你什么时候调用的.

必须等所有的数据装载完成后,调用,没有问题的.

我就是这么用.
比如我绑定数据,每次取完数据后,在调用这个 东西.

4,327

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧