我有一个带有一些自定义行的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]
答案 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>