Flex AdvancedDataGrid取消激活延迟渲染

时间:2013-05-27 19:49:34

标签: flex itemrenderer advanceddatagrid

我有一个带有一些自定义行的AdvancedDataGrid组件。我在组件中可见的行数有限。可以通过滚动条访问其他行。在我的应用程序中,我有ha Save&下一个按钮,保存实际选定的记录,并将网格的选定项目迭代1直到结束。不幸的是,此过程仅在我到达可见行的末尾之前有效。之后,当我选择不可见的行并尝试以编程方式滚动时,网格崩溃:

//Bad Crash
this.documentBrowser.dg.selectedIndex = index + 1;
this.documentBrowser.dg.validateNow();
this.documentBrowser.dg.scrollToIndex(this.dg.selectedIndex);

我发现下一个元素在那个时刻没有实现。加载后是否有可能在网格中渲染所有项目或停用延迟渲染?

堆栈跟踪:

TypeError:错误#1010:术语未定义且没有属性。     at mx.controls.listClasses :: AdvancedListBase / makeRowsAndColumnsWithExtraRows()[/ Users / justinmclean / Documents / ApacheFlexSDK / frameworks / projects / advancedgrids / src / mx / controls / listClasses / AdvancedListBase.as:4008]     at mx.controls.listClasses :: AdvancedListBase / updateDisplayList()[/ Users / justinmclean / Documents / ApacheFlexSDK / frameworks / projects / advancedgrids / src / mx / controls / listClasses / AdvancedListBase.as:3582]     at mx.controls :: AdvancedDataGridBaseEx / updateDisplayList()[/ Users / justinmclean / Documents / ApacheFlexSDK / frameworks / projects / advancedgrids / src / mx / controls / AdvancedDataGridBaseEx.as:2033]     at mx.controls :: AdvancedDataGrid / updateDisplayList()[/ Users / justinmclean / Documents / ApacheFlexSDK / frameworks / projects / advancedgrids / src / mx / controls / AdvancedDataGrid.as:2907]     at mx.controls.listClasses :: AdvancedListBase / validateDisplayList()[/ Users / justinmclean / Documents / ApacheFlexSDK / frameworks / projects / advancedgrids / src / mx / controls / listClasses / AdvancedListBase.as:3480]     在mx.managers :: LayoutManager / validateDisplayList()[/ Users / justinmclean / Documents / ApacheFlexSDK / frameworks / projects / framework / src / mx / managers / LayoutManager.as:744]     在mx.managers :: LayoutManager / doPhasedInstantiation()[/ Users / justinmclean / Documents / ApacheFlexSDK / frameworks / projects / framework / src / mx / managers / LayoutManager.as:827]     在mx.managers :: LayoutManager / doPhasedInstantiationCallback()[/ Users / justinmclean / Documents / ApacheFlexSDK / frameworks / projects / framework / src / mx / managers / LayoutManager.as:1195]

1 个答案:

答案 0 :(得分:1)

我很确定延迟渲染功能会在滚动屏幕后重新使用您的项目渲染器(以优化性能)。所以也许你只需要对可见的那些做任何事情,它将对所有渲染器实例保持“完成”?

您确定需要自己访问ACTUAL可见行而不是DataProvider中支持它们的项目吗?如果访问您的支持数据没问题,也许您应该遍历dataProvider。

我创建了这个小应用程序,它滚动并突出显示一行名为gotoGridItem(index)的行。在尝试设置selectedIndex之前我滚动到该项目 - 也许这就是让你崩溃的原因?

这是我的代码:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

    <mx:AdvancedDataGrid id="theGrid" dataProvider="{rowDataItems}" x="50" y="50"/>
    <s:NumericStepper id="rowIndSpr" minimum="0" maximum="{theGrid.dataProvider.length-1}" value="{8}"/>
    <s:Button click="gotoGridItem(int(rowIndSpr.value))" label="Go" y="20" />

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            [bindable] public var rowDataItems:ArrayCollection = new ArrayCollection([

                //...lots of data items for rows ...

            ]);

            public function gotoGridItem(index:uint):void{


                theGrid.scrollToIndex(index);
                theGrid.selectedIndex = index;
                theGrid.validateNow();
            }
        ]]>

    </fx:Script>
</s:Application>