【问题标题】:How to improve datagrid perfomace when using itemrenderer withing datagrid?在数据网格中使用项目渲染器时如何提高数据网格性能?
【发布时间】:2009-07-31 11:40:40
【问题描述】:

由于性能不佳,DataGrid 将缓存复选框并将它们重复用于不同的行。如果您有 50 行,则不会创建 50 个复选框。它将在可见的位置创建尽可能多的复选框,以及更多用于填充的复选框,然后在滚动时重复使用它们。这就是为什么您需要显式管理它们的状态。 怎样才能改进呢?如何固定复选框值?我使用了像下面这样的复选框但是复选框不记得值

 <mx:DataGrid id="calamount"dataProvider="{xml_coupon.lastResult.Teamcoupon.match_details}" variableRowHeight="true">
<mx:columns>
    <mx:DataGridColumn headerText="1"  rendererIsEditor="true" editorDataField="selected">
    <mx:itemRenderer>
    <mx:Component>
    <mx:HBox verticalAlign="middle" paddingLeft="2">
    <mx:CheckBox  id="checkbox1"  selected="{outerDocument.checkedAll}" click="{data.check1=checkbox1.selected;outerDocument.calcValues()}"/>
    </mx:HBox>
    </mx:Component>
    </mx:itemRenderer>
    </mx:DataGridColumn>
</mx:columns>

【问题讨论】:

    标签: apache-flex performance air flash


    【解决方案1】:

    我不确定我是否完全理解您的问题,但如果您正在寻找提高自定义项目渲染器性能的方法,我会先阅读 Alex Harui 在他的博客上发表的精彩文章。具体来说,关于性能的部分:

    性能

    在设计自定义项目渲染器时,您应该牢记性能。虽然使用 Canvas、HBox 或 VBox 并在其中放置一些组件并拥有一个渲染器既简单又快速,但请记住容器确实又大又慢,如果您要在 DataGrid 中看到很多容器,您可能会遇到性能问题。我们经常看不到它们,因为我们在非常快的机器上开发,但您必须考虑您的最终用户将拥有什么样的硬件。因此,如果屏幕上显示超过六个,我不鼓励在自定义项目渲染器中使用来自 mx.containers 的任何容器。除非您在渲染器中布局超过三个或四个小部件,否则从 UIComponent 开始并编写一些逻辑将组件布局到正确位置会快得多。来自 mx.containers 的容器还考虑了延迟实例化逻辑、滚动条、剪辑和一堆您可能不需要在渲染器中使用的其他东西。

    这就是为什么您会看到所有示例都使用 ActionScript 而不是 MXML。是的,这意味着您不能使用 FlexBuilder 对渲染器进行编码,是的,其中一些示例可以在 MXML 中完成,但是在 MXML 中很容易生成您可能不需要的额外代码。您会注意到,出于同样的原因,我在这些示例中没有使用数据绑定。在不会改变或只改变一两次的东西上使用绑定实际上有点浪费(虽然非常方便)。相反,我在初始化事件上设置了 dataprovider(如果我使用 HTTPService,我会在结果事件上这样做)。(1)

    【讨论】:

      【解决方案2】:

      您的意思是您的复选框没有记住这些值吗?你必须确保你的项目渲染器是数据驱动的。

      <mx:CheckBox selected="{data.someBooleanProperty}"/>
      

      这样,当您滚动时,它会确保它们被正确选中/取消选中。

      【讨论】:

      • 我尝试了 但仍然复选框不记得值?如果我在数据网格中滚动滚动条,那么复选框也被选中
      • 您需要将“someBooleanProperty”替换为dataprovider上的一个属性
      【解决方案3】:

      您将复选框选中的属性绑定到错误的东西。根据单击事件处理程序中的代码判断,它应该绑定到 data.check1(好暗示的名称)。顺便说一句,这应该是“更改”事件,因为您可以在按 ENTER 或空格键时更改复选框的值并且它具有焦点,在这种情况下您不会收到点击事件。

      【讨论】:

        猜你喜欢
        • 2022-08-17
        • 2015-07-09
        • 1970-01-01
        • 2012-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多